无法创建自定义哈希函数 unordered_map?
Trouble creating custom hash function unordered_map?
我想为无序映射创建自定义哈希函数。我发现了这个问题: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 作为整数向量时:,
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’
我真的不知道如何解决这个问题,如果有人能帮助我,那就太好了!谢谢!
#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;
}
您的问题可能出在其他地方。
我想为无序映射创建自定义哈希函数。我发现了这个问题: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 作为整数向量时:,
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’
我真的不知道如何解决这个问题,如果有人能帮助我,那就太好了!谢谢!
#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;
}
您的问题可能出在其他地方。