Python字典和C++中的tr1 :: unordered_map之间的区别

9

我有一个关于理解Python字典工作原理的问题。

我记得在某个地方读到Python中的字符串是不可变的,以允许哈希,并且这也是为什么不能直接使用列表作为键的原因,即列表是可变的(通过支持.append),因此它们不能用作字典键。

我想知道C++中unordered_map的实现如何处理这些情况。(因为C++中的字符串是可变的)


2
希望我能编辑帖子,这样我就可以把“dict's”中的“'”编辑掉...;-)(是的,我现在有点讽刺的心情;-)) - Jürgen A. Erhard
1个回答

8

在所有的 C++ map/set 容器中,键都是 const 的,因此一旦添加到容器中就无法更改。

请注意,C++ 容器不仅限于字符串键,您可以使用任何对象,但 const 属性将防止在键被复制到容器后进行修改。


1
如果有人使用const_cast来搞乱键,会发生什么? - none
参考:http://www.sgi.com/tech/stl/Map.html -- value_type 被定义为“存储在 map 中的对象类型,即 pair<const key_type, data_type>”。请注意 const - Dan
4
如果有人这样做,就会自食其果 :) std::map 是使用红黑树实现的。更改键将使树无效。unordered_map 是使用哈希表实现的。更改键意味着您很可能再也找不到该项,因为它可能在错误的哈希桶中。 - Dan
1
@Akshay @Dan:更具体地说,通过const_cast修改常量对象会导致未定义的行为。 - GManNickG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接