我有一个关于理解Python字典工作原理的问题。
我记得在某个地方读到Python中的字符串是不可变的,以允许哈希,并且这也是为什么不能直接使用列表作为键的原因,即列表是可变的(通过支持.append),因此它们不能用作字典键。
我想知道C++中unordered_map的实现如何处理这些情况。(因为C++中的字符串是可变的)
我有一个关于理解Python字典工作原理的问题。
我记得在某个地方读到Python中的字符串是不可变的,以允许哈希,并且这也是为什么不能直接使用列表作为键的原因,即列表是可变的(通过支持.append),因此它们不能用作字典键。
我想知道C++中unordered_map的实现如何处理这些情况。(因为C++中的字符串是可变的)
在所有的 C++ map/set 容器中,键都是 const 的,因此一旦添加到容器中就无法更改。
请注意,C++ 容器不仅限于字符串键,您可以使用任何对象,但 const 属性将防止在键被复制到容器后进行修改。
value_type
被定义为“存储在 map 中的对象类型,即 pair<const key_type, data_type>
”。请注意 const
。 - Danstd::map
是使用红黑树实现的。更改键将使树无效。unordered_map
是使用哈希表实现的。更改键意味着您很可能再也找不到该项,因为它可能在错误的哈希桶中。 - Danconst_cast
修改常量对象会导致未定义的行为。 - GManNickG