什么是第三个参数的目的KeyEqual
的std::unordered_set
?哈希唯一性还不够吗?
template<
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class Allocator = std::allocator<Key>
> class unordered_set;
抱歉,这个问题听起来很幼稚。从Python / PHP转向C ++ :)
就目前而言,我的实现KeyEqual
总是重复Hash
隐含的。所以我想知道我是否正确地做到了。
但是,如果发生哈希冲突怎么办?
该图演示了两个不同的元素碰巧具有相等的哈希值的情况。结果,当涉及哈希时,哈希值可能不是唯一的。
引用的参考文献中std::unordered_set
:
在内部,unordered_set中的元素未按任何特定顺序排序,而是根据它们的哈希值组织为存储桶,以允许直接通过它们的值快速访问各个元素(平均具有恒定的平均时间复杂度)。
因此,一个桶可以包含多个元素!这两个元素将具有相同的哈希值,这不能保证是唯一的!
唯一可以保证唯一的就是钥匙!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句