Нет соответствия для пользовательского хеширования / функции равенства с unordered_map

У меня есть следующий код.

файл Ant.h

class hashing_func {
public:
unsigned long operator()(const Node& key) const {
unsigned long hash;
hash = key.GetId();
return hash;
}
};

class key_equal_fn {
public:
bool operator()(const Node& t1, const Node& t2) const {
return (t1.GetId() == t2.GetId());
}
};

class Ant {
private:
std :: unordered_map <Node*, int, hashing_func, key_equal_fn> nodemap;
};

Тем не менее, при компиляции я получаю сообщение об ошибке

[Error] no match for call to '(const hashing_func)(Node* const&)'

Очевидно, моя карта содержит Node* (указатели узла) в качестве ключей, и в настоящее время ожидает

long unsigned int hashing_func :: operator() ( const Node& const)

Как мне исправить это (преобразовать хеширование и функцию равенства для принятия указателей на узлы)? Большое спасибо за помощь.

1

Решение

Проблема в том, что ваши ключи Node*, но ваш хеш и компаратор равенства предназначены для const Node&, Вам нужно будет использовать Node ключи, или написать функторы для Node*:

std :: unordered_map <Node, int, hashing_func, key_equal_fn> nodemap;

или же

class hashing_func
{
public:
unsigned long operator()(const Node* key) const
{
return = key->GetId();
}
};

и т.п.

3

Другие решения

Для хэша подпись должна быть

unsigned long operator()(Node* key) const;

и для сравнения, это должно быть

bool operator()(Node* t1, Node* t2) const;
2

По вопросам рекламы [email protected]