如何解决c ++ 0x中不可变的设置键在哪里?
| 我在一次演讲中听说C ++ 0x关联容器中的键不再可变。以前,在C ++ 03中,它们是可变的,只有Standard的文本说顺序或键必须保持不变。 现在,幸运的是,这是非法的:std::set<int> ss { 2,5,1,6,8,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ѭ,所以它从来没有问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。