我在C ++中使用unordered_set
来检查等值字。
struct CustomHasher {
size_t operator()(const char& c) const;
};
// This hashing function should take the given character c and return an integer
// representing the hash value. This will be computed by the position of a-z,
// where a=>0, b=>1, and so on.
size_t CustomHasher::operator()(const char& c) const {
size_t i = tolower(c) - 'a';
return i;
}
void add_multiset(const string& s,
unordered_multiset<char, CustomHasher>* ms) {
for (int i = 0; i < s.length(); i++)
ms->insert(tolower(s[i]));
}
// inside main function
unordered_multiset<char, CustomHasher> ms;
add_multiset("hello", &ms);
我的代码出了什么问题?当我检查输出:ms.bucket('l')
我应该得到11,但我得到7
同样ms.bucket('o')
我得到6,但我得到14
我的代码出了什么问题?
答案 0 :(得分:0)
桶号不一定等于哈希值。对于几乎为空的unordered_multiset
,您会期望许多哈希共享同一个桶。
由于unordered_multiset
是一个模板类,因此您可以轻松地跟踪代码,以确切了解它是如何根据哈希计算存储桶编号的。