我有以下代码。
档案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)
我将如何解决此问题(将哈希和相等的函数转换为接受节点指针)?非常感谢您的帮助。
答案 0 :(得分:3)
问题是您的密钥是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();
}
};
等
答案 1 :(得分:2)
对于哈希,签名应为
unsigned long operator()(Node* key) const;
并且为了比较,它应该是
bool operator()(Node* t1, Node* t2) const;