[英]std::unordered_map containing another 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.