【发布时间】:2022-11-02 05:47:34
【问题描述】:
是否可以告诉std::unordered_map 哈希函数是完美的?
因此,如果两个不同的键产生相同的哈希码,它们会编辑相同的内存槽。
【问题讨论】:
标签: c++ std unordered-map
是否可以告诉std::unordered_map 哈希函数是完美的?
因此,如果两个不同的键产生相同的哈希码,它们会编辑相同的内存槽。
【问题讨论】:
标签: c++ std unordered-map
哈希函数仅仅完善是不够的。生成不同哈希值的值可能会映射到哈希表中的同一槽。例如,容器的大小可能是 11,其中一个哈希值可以是 12,另一个可以是 23。假设容器使用模运算符来映射这些值,它们都将映射到插槽号 1。所以,你需要一种方法来区分这些。
【讨论】:
您可以将std::unordered_map 的KeyEqual 模板参数设置为[](const auto& l,const auto& r){return true;},因为它只应在哈希比较相等时使用。
【讨论】:
使operator== 产生与散列而不是属性的比较,将导致std::unordered_map 假设它们是相等的。
【讨论】: