我读到 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/