У меня есть следующий код.
файл 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)
Как мне исправить это (преобразовать хеширование и функцию равенства для принятия указателей на узлы)? Большое спасибо за помощь.
Проблема в том, что ваши ключи 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();
}
};
и т.п.
Для хэша подпись должна быть
unsigned long operator()(Node* key) const;
и для сравнения, это должно быть
bool operator()(Node* t1, Node* t2) const;