我是 C++ 编程的初学者,在使用
std::unordered_set
时遇到了问题。这是我的代码:
#include <iostream>
#include <unordered_set>
char myHash(const std::string& s) {
std::cout << "myHash(const std::string&)" << std::endl;
}
int main() {
std::unordered_set<std::string, decltype(myHash)*> mySet(3, myHash);
std::string name;
while (std::cin >> name) {
mySet.insert(s);
std::cout << "Number of buckets in use: " << mySet.bucket_count() << '\n'
}
return 0;
}
我打算创建一个
unordered_set
,其哈希值是名称的第一个字母。那么第 6 行会创建 3 个存储桶,还是创建一个特定哈希值的存储桶(如 's'
)来存储 3 个元素?
示例输入和输出是这样的:
simon
myHash(const std::string&)
Number of buckets in use: 3
sireal
myHash(const std::string&)
Number of buckets in use: 3
sight
myHash(const std::string&)
Number of buckets in use: 3
sith
myHash(const std::string&)
Number of buckets in use: 7
为什么最后一行数字变成了7?
期待您耐心的解答:)
在您的代码中,行 std::unordered_set
试试这个:
#include <iostream>
#include <unordered_set>
struct FirstLetterHash {
std::size_t operator()(const std::string& s) const {
return std::hash<char>()(s[0]);
}
};
int main() {
std::unordered_set<std::string, FirstLetterHash> mySet;
std::string name;
while (std::cin >> name) {
mySet.insert(name);
std::cout << "Number of buckets in use: " << mySet.bucket_count() << '\n';
}
return 0;
}