对C ++ unordered_map和哈希冲突感到困惑

时间:2015-04-22 08:02:13

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

我已经读过unordered_map在桶中放置具有相同散列的元素,这就是它处理散列冲突的方式。但是,当我选中insert function时,它会说:

  

每个元素只有在其键不等同于容器中已有的任何其他元素的键时才会插入

这是否意味着我无法插入具有相同哈希的元素?..我应该能够插入一个带有新哈希的元素,因为unordered_map结构可以处理冲突,对吧?我想我可能遗失了什么。

1 个答案:

答案 0 :(得分:3)

一旦你意识到哈希不一定是密钥,那么这些语句肯定是可能的是一致的。

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

例如,假设您使用名字作为密钥的friends集合。哈希函数是(相当简单)“使用名称的第一个字母。

因此,虽然Albert,Andrew,Adam,Bill,Benny和Chloe是六个不同的键,但他们只考虑了三个不同的哈希值:

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