我在這里看到一個帖子,你可以“遇到生日問題”。使用時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!?
uj5u.com熱心網友回復:
std::unordered_map 是否有可能發生沖突?
發生沖突的不是容器,而是您為容器提供的散列函式。
是的,所有散列函式——當它們的輸出范圍小于輸入域時——都有沖突。
有沒有可能列印錯誤!?
不,這是不可能的。哈希函式將多個值放入單個存盤桶中是完全正常的。這將在散列沖突的情況下發生,但它也會發生在不同的散列值上。查找函式將使用線性搜索獲得正確的值。密鑰的身份由相等函式確定,而不是由散列函式確定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/418396.html
標籤:
