我该如何创建一个不区分大小写的unordered_map<string, int>
?
重载key_equal
是否足够,还需要更新hasher
吗?
我该如何创建一个不区分大小写的unordered_map<string, int>
?
重载key_equal
是否足够,还需要更新hasher
吗?
哈希程序也需要更新,因为默认的哈希算法对于仅在符号大小写不同的字符串无法产生相同的哈希码 - 这是哈希码函数与不区分大小写字符串一起使用的基本属性。
std::string s1 = "Hello";
std::string s2 = "hello";
std::hash<std::string> hash_fn;
size_t hash1 = hash_fn(s1);
size_t hash2 = hash_fn(s2);
std::cout << hash1 << '\n';
std::cout << hash2 << '\n';
以下是在ideone上显示的不同数值:
101669370
3305111549
std::hash<Key>
函数。因此,根据std::hash<Key>
如何处理字符串(我不知道),你的答案可能是错误的! - MBZstd::hash
对字符串不区分大小写是没有意义的:这样会增加 CPU 的使用成本,并且也会导致更多的哈希冲突。 - Sergey Kalinichenko