繁体   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