C++STL中string类型的set

柯西没科气 2017-10-17 08:52:10
在写程序的时候无意间发现定义一个string类型的set,这个string对象会变成const string,请问出现这种现象的原因是什么?在vector中没有这种现象。还有,如果我确实想改变set中某个string对象的内容,有没有什么好的方法。

程序代码如下:

#include<iostream>
#include<set>
#include<vector>

using namespace std;

int main()
{
set<string> a = { "A","B","C" };
auto it = a.begin();
it->append("D");
vector<string> b = { "A","B","C" };
b[0].append("D");
return 0;
}

程序截图(运行环境:win10+vs2015)如下:

报错信息:
...全文
1125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
RedProgramer 2017-10-18
  • 打赏
  • 举报
回复
改为 it.append("D"); 试试
sdghchj 2017-10-18
  • 打赏
  • 举报
回复
set是排序容器,以元素为关键字,插入即排序,所以基本不允许修改其中的元素,因为一旦修改就需要重排序,其内部的检举声明如下: typedef typename _Rep_type::const_iterator iterator; typedef typename _Rep_type::const_iterator const_iterator; typedef typename _Rep_type::const_reverse_iterator reverse_iterator; typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 可见iterator和const_iterator是一样的,是不允许修改内部元素的。只能erase后再重新insert.
真相重于对错 2017-10-18
  • 打赏
  • 举报
回复
*it.append
柯西没科气 2017-10-18
  • 打赏
  • 举报
回复
引用 2 楼 sdghchj 的回复:
set是排序容器,以元素为关键字,插入即排序,所以基本不允许修改其中的元素,因为一旦修改就需要重排序,其内部的检举声明如下: typedef typename _Rep_type::const_iterator iterator; typedef typename _Rep_type::const_iterator const_iterator; typedef typename _Rep_type::const_reverse_iterator reverse_iterator; typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 可见iterator和const_iterator是一样的,是不允许修改内部元素的。只能erase后再重新insert.
嗯嗯,明白了,多谢多谢。
柯西没科气 2017-10-18
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
*it.append
这个并不行,*it.操作和it->的作用是一样的
  • 打赏
  • 举报
回复
引用 2 楼 sdghchj 的回复:
set是排序容器,以元素为关键字,插入即排序,所以基本不允许修改其中的元素,因为一旦修改就需要重排序,其内部的检举声明如下: typedef typename _Rep_type::const_iterator iterator; typedef typename _Rep_type::const_iterator const_iterator; typedef typename _Rep_type::const_reverse_iterator reverse_iterator; typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; 可见iterator和const_iterator是一样的,是不允许修改内部元素的。只能erase后再重新insert.
对头对头,set里面的内容就是按const保存的

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧