我正在使用带有 的自定义哈希函数unordered_map,但出现此错误:
error: static assertion failed: hash function must be invocable with an argument of key type
Run Code Online (Sandbox Code Playgroud)
当我使用unordered_multimap.
我的代码:
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;
class Hasher {
public:
size_t operator() (string const& key) const {
size_t hash = 0;
for(size_t i = 0; i < key.size(); i++) {
hash += key[i] % 7;
}
return hash;
}
};
int main(int argc, char const *argv[]) {
unordered_multimap<int, int, Hasher, equal_to<int>> hashmap;
hashmap.insert(make_pair(1, 11));
hashmap.insert(make_pair(1, 21));
hashmap.insert(make_pair(2, 12));
hashmap.insert(make_pair(3, 13));
auto range = hashmap.equal_range(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您在关键使用不匹配的类型unordered_map和operator()在Hasher。
您的代码应该是(请注意内联注释):
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;
class Hasher {
public:
size_t operator() (string const& key) const { // the parameter type should be the same as the type of key of unordered_map
size_t hash = 0;
for(size_t i = 0; i < key.size(); i++) {
hash += key[i] % 7;
}
return hash;
}
};
int main(int argc, char const *argv[]) {
unordered_multimap<std::string, int, Hasher, equal_to<std::string>> hashmap; // key should be string type
hashmap.insert(make_pair("1", 11)); // key should be string type
hashmap.insert(make_pair("1", 21));
hashmap.insert(make_pair("2", 12));
hashmap.insert(make_pair("3", 13));
auto range = hashmap.equal_range("1"); // equal_range's parameter should be the same type as key
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7427 次 |
| 最近记录: |