c ++ 0x中不可变的set-key,在哪里?

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?)

Ise*_*ria 5

有关您的信息,N3290中的23.2.4/5表示:

For setmultisetvalue类型与键类型相同.对于 mapmultimap它等于 pair<const Key, T>.关联容器中的键是不可变的.

和23.2.4/6说:

对于关联容器,其中值类型是相同的键类型,都iteratorconst_iterator是恒定的迭代器.
......
注: iteratorconst_iterator在这种情况下,相同的语义

这个引用是否解决了你的问题?