的hash_map&LT; vector <int>,int&gt;使用find函数时出错</int>

时间:2013-03-19 10:17:58

标签: c++ vector find hashmap

struct HASH_CMP {
    bool operator()(vector<int> V, vector<int> W) const {
        for(int i = 0; i < 10; i++)
            if(V[i] != W[i]) return false;
        return true;
    }
};
hash_map< std::vector<int>, int, HASH_CMP > H;

long long inHash(const vector<int> &V) {
    if(H.find(V) == H.end()) return -1; //this line
    return H[V];
}

我已经声明了以下哈希,给定上面的比较类,我在提到的行中收到错误说:

  

与“(const HASH_CMP) (const std::vector<int, std::allocator<int> >&)

”的调用无法匹配

我需要一些修复此代码的帮助。

2 个答案:

答案 0 :(得分:2)

第三个模板参数是哈希算子。比较仿函数是第四个模板参数。因此,您需要:

hash_map<std::vector<int>, int, HASH_HASH, HASH_CMP>

你还需要写HASH_HASH

(我建议您查看Boost的hash_range实现以获取灵感。)另请注意,已经定义了向量的等式(并且比您的版本更有效),并且不需要自编代码。

答案 1 :(得分:1)

正如错误告诉您的那样,您需要一个哈希函数,该函数需要const std::vector<int>&并返回size_t。要在哈希映射中放置一些东西,必须有一些方法来散列它。

这将有效:

size_t operator()(const vector<int>& vec)
{
    size_t v = 0;
    for (vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it)
        v = (v ^ *it) * 0x9e3779b9;
    return v;
}