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> >&)
我需要一些修复此代码的帮助。
答案 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;
}