簡體   English   中英

對C ++ unordered_map和哈希沖突感到困惑

[英]Confused about C++ unordered_map and hash collision

我已經讀過unordered_map在桶中放置具有相同散列的元素,這就是它處理散列沖突的方式。 但是,當我檢查插入功能時 ,它說:

僅當每個元素的鍵不等同於容器中已有的任何其他元素的鍵時,才會插入每個元素

這是否意味着我不能插入具有相同哈希的元素?..我應該能夠插入一個帶有新哈希的元素,因為unordered_map結構可以處理沖突,對吧?我想我可能會遺漏一些東西。

這當然是可能的這些語句是一致的,一旦你意識到哈希不一定是關鍵。

一組不同的密鑰可以生成相同的散列值,因此存儲在同一個存儲桶中,但仍然允許禁止重復密鑰的限制。

例如,假設您使用名字作為密鑰的friends集合。 哈希函數是(相當簡單)“使用名稱的第一個字母。

因此,雖然Albert,Andrew,Adam,Bill,Benny和Chloe是六個不同的鍵,但它們只占三個不同的哈希值:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM