std::unordered_map是否有可能发生冲突

Is there any possibility that std::unordered_map collides?

本文关键字:可能发生 冲突 是否 map unordered std      更新时间:2024-09-21

我在这里看到一篇帖子,你可以"遇到生日问题"使用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冲突的可能性?

发生冲突的不是容器,而是您为容器提供的哈希函数。

是的,所有散列函数——当它们的输出范围小于输入域时——都会发生冲突。

是否有可能打印ERROR!?

不,这是不可能的。散列函数将多个值放入一个桶中是完全正常的。这种情况会发生在哈希冲突的情况下,但也会发生在不同的哈希值中。查找函数将使用线性搜索获得正确的值。密钥的标识是由相等函数决定的,而不是由散列函数决定的。