簡體   English   中英

std::unordered_map 是否有可能發生沖突?

[英]Is there any possibility that std::unordered_map collides?

我在這里看到一個帖子,你可以“遇到生日問題”。 使用std::unordered_map

我什么時候應該使用 unordered_map 而不是 std::map

這真的讓我感到驚訝,這與說std::unordered_map使用不安全是一樣的。 真的嗎? 如果我不解釋自己,讓我給你看一個例子:

unordered_map<size_t, size_t> m;
for (size_t i = 0; i < 100; ++i)
    m[i] = i;
for (size_t i = 0; i < 100; ++i)
    if (m[i] != i)
        cerr << "ERROR!" << endl;

如果此代碼在main中,是否有可能打印ERROR! ?

std::unordered_map 是否有可能發生沖突?

發生碰撞的不是容器,而是您為容器提供的 hash function。

是的,所有 hash 函數 - 當它們的 output 范圍小於輸入域時 - 都會發生沖突。

有沒有可能打印錯誤?

不,這是不可能的。 hash function 將多個值放入單個存儲桶中是完全正常的。 這將在 hash 碰撞的情況下發生,但它也會發生在不同的 hash 值的情況下。 查找 function 將使用線性搜索獲得正確的值。 密鑰的身份由等式 function 確定,而不是由 hash function 確定。

暫無
暫無

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

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