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冲突的可能性?
发生冲突的不是容器,而是您为容器提供的哈希函数。
是的,所有散列函数——当它们的输出范围小于输入域时——都会发生冲突。
是否有可能打印ERROR!?
不,这是不可能的。散列函数将多个值放入一个桶中是完全正常的。这种情况会发生在哈希冲突的情况下,但也会发生在不同的哈希值中。查找函数将使用线性搜索获得正确的值。密钥的标识是由相等函数决定的,而不是由散列函数决定的。
相关文章:
- C++ 提升哈希计算而不会发生冲突
- 模块名称是否驻留在单独的"name space"中,或者它们可能与例如变量名称发生冲突?
- 禁止可移动的QGraphics物品与其他物品发生冲突
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- 在多线程中是否可能发生读取对象的一半大小?
- 在Visual Studio中定义与Typedef枚举发生冲突的原因是什么?
- wchar_t与未签名的空头发生冲突
- 如果外部"C"包含与Qt库发生冲突怎么办?
- C++读取文件时可能发生内存泄漏
- 将BSONObj对象存储在std::vector中会与大型文档发生冲突
- C++访问读取位置时发生冲突,类此指针为NULL
- 变量定义期间是否有可能发生异常
- CMake - 两个库中的相同文件名发生冲突
- while(true)可能发生的最坏情况是什么?
- Qt #define "signals" 与GStreamer(GStreamer)发生冲突
- C++:为什么我会出现此分段错误(可能发生在 main 之前?
- 我自己的copy()函数与std::copy()发生冲突
- C++ 当命名空间发生冲突时,为什么结构/类不与变量和函数发生冲突?
- Qt读取访问在以下位置发生冲突:0x0,标志=0x0(第一次机会)
- 有没有办法在窗口上注册热键而不会发生冲突