我想为无序地图创建自定义哈希函数。我发现了这个问题:C++ unordered_map fail when used with a vector as key并发现如果在无序映射中使用向量作为键,则需要创建自己的哈希函数。我试过复制写的散列函数:
template <typename Container>
struct container_hash {
std::size_t operator()(Container const& c) const {
return boost::hash_range(c.begin(), c.end());
}
};
但是当我尝试用我的键创建一个unordered_map作为这样的int的向量时,:
unordered_map<vector<int>, int, container_hash<vector<int>>> hash;
我得到一个问题:
error: declaration of ‘struct std::hash<std::vector<int> >’
我尝试过其他方法,通过尝试
等方法将container_hash函数包含到我的unordered_map的实现中unordered_map<vector<int>, int, container_hash> hash;
但我再次提出错误说:
type/value mismatch at argument 3 in template parameter list for ‘template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> class std::unordered_map’
我真的不确定如何解决这个问题,如果有人能帮助我那会很棒!谢谢!
答案 0 :(得分:1)
#include <vector>
#include <boost/unordered_map.hpp>
template <typename Container>
struct container_hash {
std::size_t operator()(Container const& c) const {
return boost::hash_range(c.begin(), c.end());
}
};
int main()
{
boost::unordered_map
<std::vector <int>, int,
container_hash <std::vector <int> > > foo;
return 0;
}
您的问题可能在其他地方。