tow*_*owi 3 containers iterator stl c++11
我在一次演讲中听说C++ 0x 关联容器中的键不再可变.之前,在C++ 03中,它们是可变的,并且只有标准的文本说,顺序或键必须保持不变.
现在,幸运的是,这是非法的:
std::set<int> ss { 2,5,1,6,8,5,8,0,2,4,9 };
auto it = ss.find(4);
*it = 7; // 'ERROR: assignment of read-only location'
Run Code Online (Sandbox Code Playgroud)
这个变化在C++ 0x中反映在哪里?我看了最终选秀,但仍然看到了find()这样的回报iterator- 听起来可以修改.(为什么这是,而且必须是我猜测:容器就像map想要允许修改的值.修改了什么才能使关键部分const?)
有关您的信息,N3290中的23.2.4/5表示:
For
set和multisetvalue类型与键类型相同.对于map与multimap它等于pair<const Key, T>.关联容器中的键是不可变的.
和23.2.4/6说:
对于关联容器,其中值类型是相同的键类型,都
iterator和const_iterator是恒定的迭代器.
......
注:iterator和const_iterator在这种情况下,相同的语义
这个引用是否解决了你的问题?