1

我有以下代码。

文件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)

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

4

2 回答 2

3

问题是您的键是Node*,但您的哈希和相等比较器是 for 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();
        }
};

等等

于 2013-10-20T09:22:14.270 回答
2

对于哈希,签名应该是

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

为了比较,它应该是

bool operator()(Node* t1, Node* t2) const;
于 2013-10-20T09:23:31.303 回答