c++ - 对 C++ unordered_map 和散列冲突感到困惑

标签 c++ c++11 hash hashtable unordered-map

我读到 unordered_map 将具有相同散列的元素放入桶中,这就是它处理散列冲突的方式。然而,当我检查 insert function ,它说:

Each element is inserted only if its key is not equivalent to the key of any other element already in the container

这是否意味着我不能插入具有相同散列的元素?..我应该能够插入具有新散列的元素,因为 unordered_map 结构可以处理冲突,对吗?..我想我可以缺少一些东西。

最佳答案

一旦您意识到散列不一定是 key ,这些语句肯定可能是一致的。

一组不同的键可能会生成相同的哈希值,因此存储在同一个桶中,但这仍然允许限制重复键是不允许的。

例如,假设您有一个使用名字作为键的 friends 集合。散列函数(相当简单)“使用名称的第一个字母。

因此,虽然 Albert、Andrew、Adam、Bill、Benny 和 Chloe 是六个不同的键,它们只占三个不同的哈希值:

          A                 B            C    (buckets)
   ______/|\_____          / \           |
  /       |      \        /   \          |
Albert  Andrew  Adam    Bill  Benny    Chloe  (keys)

关于c++ - 对 C++ unordered_map 和散列冲突感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29791277/

相关文章:

c++ - 如何将通用 packaged_tasks 存储在容器中?

algorithm - 为什么哈希输出的长度是固定的?

c++ - 从字符串 vector 、子字符串中删除字符串

c++ - 在 directx 11 中渲染地形

c++ - 迭代 `std::multiset` 的唯一元素

c++ - 类中静态成员的内存分配

math - 故意散列冲突

ruby - 检查散列是否有一个包含一些文本的键

c++ - GetFirst 和 GetNext 调用以从持久类中获取记录

c++ - Qt QWidget隐藏动画