use*_*721 3 c++ stl unordered-map stdmap c++11
本质上,我想要一个容器,其中一个元素可以被许多键访问.这可以通过定义一些用作地图键类型的多键类来完成,但由于这样的解决方案不允许修改已经插入的元素的键,我无法为其创建新的别名现有条目.
我很欣赏,std::map为了订购,密钥需要保持不变,但为什么要存在这种限制std::unordered_map呢?
如果需要,我想我可以使用指针图,但是有更好,更优雅的解决方案吗?
编辑:谢谢你清除Andrei,Xeo.尼科尔,关于我应该使用什么容器的任何建议?
好吧,之所以std::unordered_map不让你修改密钥的原因与其他关联容器不允许你修改它的原因几乎相同:它会弄乱该数据结构的内部组织.
在一个中unordered_map,密钥用于获取散列,并且该散列告诉容器放置元素的容器(当然是从哪个桶中检索它).如果修改密钥,则修改哈希值,这意味着应将元素移动到其他存储桶.这就像删除它并重新插入它,基本上.
另一方面,关联容器的整个概念是任何元素由一个固定的值表示,以便它在容器中的位置可以作为该值的函数快速计算.如果允许多个键,您可以使用哪个键快速确定元素的存储位置或存储位置?
您想要的可能是一个临时数据结构,其复杂性保证与标准库不同.
但就个人而言,在我看来,您只是在寻找引用语义,因为您打算共享一个对象的多个视图.这自然会让我使用(智能)指针,特别是当我听到世界"别名"时.我建议你去寻找带有shared_ptrs值的地图.
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |