使用无序集检查isogram c ++

时间:2018-04-30 02:17:09

标签: c++ c++11

我在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 我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

桶号不一定等于哈希值。对于几乎为空的unordered_multiset,您会期望许多哈希共享同一个桶。

由于unordered_multiset是一个模板类,因此您可以轻松地跟踪代码,以确切了解它是如何根据哈希计算存储桶编号的。