是否可以告诉std::unordered_map
散列函数是完美的?
因此,如果两个不同的键产生相同的散列码,它们就会编辑相同的内存槽。
哈希函数是不够的。生成不同哈希值的值可能被映射到哈希表中的同一个槽。例如,容器的大小可能是11,其中一个哈希值可以是12,另一个可以是23。假设容器使用模数运算符来映射这些值,那么它们都将映射到槽号1。所以,你需要一种方法来区分这些以后
您可以将std::unordered_map
的KeyEqual
模板paraemer设置为[](const auto& l,const auto& r){return true;}
,因为它只应在哈希比较相等时使用。
使operator==
与散列而不是属性进行比较,将导致std::unordered_map
假设它们相等。