自定义散列/等于具有unordered_map的函数不匹配

时间:2013-10-20 09:17:23

标签: c++ hash equals 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)

我将如何解决此问题(将哈希和相等的函数转换为接受节点指针)?非常感谢您的帮助。

2 个答案:

答案 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;