9

如何创建不区分大小写的unordered_map<string, int>
覆盖key_equal就足够了还是我还需要更新hasher

4

1 回答 1

3

哈希器也需要更新,因为默认哈希算法不会为仅在符号大小写上有所不同的字符串生成相同的哈希码- 哈希码函数的基本属性旨在处理不区分大小写的字符串。

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
于 2013-08-04T01:03:02.130 回答