c ++ 0x中不可变的设置键在哪里?

| 我在一次演讲中听说C ++ 0x关联容器中的键不再可变。以前,在C ++ 03中,它们是可变的,只有Standard的文本说顺序或键必须保持不变。 现在,幸运的是,这是非法的:
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\'
这种变化在C ++ 0x中体现在哪里?我看了定稿,但仍然看到
find()
和这样的收益
iterator
-听起来可以修改。 (这也是为什么我必须猜:为什么像
map
这样的容器希望允许值beeing修改。为了使键部分为const,进行了哪些更改?)     
已邀请:
仅供参考,N3290中的23.2.4 / 5说:   对于
set
multiset
值   type与键类型相同。对于   
map
multimap
等于   
pair<const Key, T>
。按键   关联容器是不可变的。 和23.2.4 / 6说:   对于关联容器,   值类型与键相同   
iterator
和   
const_iterator
不变   迭代器。 ... 注意:   
iterator
const_iterator
有   在这种情况下相同的语义 这句话能解决您的问题吗?     
基本上,现在将
iterator
const_iterator
指定为相同。这当然是低级的,而不是技术性,但是对于
set
容器在C ++ 0x中将
iterator
键入为
const_iterator
是完全合法的。 对于
map
,那当然是was19ѭ,所以它从来没有问题。     

要回复问题请先登录注册