Я использую пользовательскую хеш-функцию с unordered_map
, но получаю эту ошибку:
.../hashtable.h:195:21: error: static assertion failed: hash function must be invocable with an argument of key type
static_assert(__is_invocable<const _H1&, const _Key&>{},
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hashjoin.cpp:9:12: note: candidate: 'size_t Hasher::operator()(const string&) const'
size_t operator() (string const& key) const {
^~~~~~~~
hashjoin.cpp:9:12: note: no known conversion for argument 1 from 'const int' to 'const string&' {aka 'const std::__cxx11::basic_string<char>&'}
Она отлично работает, когда я использую хеш-функцию по умолчанию 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;
}