【发布时间】:2013-01-30 18:07:13
【问题描述】:
基本上,我想要一个容器,其中一个元素可以通过多个键访问。这可以通过定义一些多键类用作映射的键类型来完成,但由于这种解决方案不允许修改已插入元素的键,因此我无法为现有条目。
我很欣赏std::map 的键需要保持不变才能进行排序,但为什么std::unordered_map 会存在此限制?
如果需要,我想我可以使用指针映射,但有没有更好、更优雅的解决方案?
编辑:谢谢你清理 Andrei,Xeo。 Nicol,关于我应该使用什么容器有什么建议吗?
【问题讨论】:
-
限制不是为了排序,而是为了保证键的唯一性。
-
因为最终通过比较器模板参数检查元素是否等效,默认情况下为
std::equal_to<K>。 -
如果你需要这个,那么你需要一个新的容器。
-
不太明白什么是“无法为现有条目创建新别名”。或许可以举个例子说明你想做什么?
-
好吧,如果您可以任意更改键的值,
unordered_map将需要感知每一个更改(因此必须在键的某种代理对象上工作,无论如何) 以重组自身,这反过来又会使该元素的任何迭代器无效。键决定了一个元素在数据结构中的位置,所以修改它只会带来麻烦。而且这甚至都没有说通过改变它来破坏键的唯一性。
标签: c++ stl c++11 unordered-map stdmap