无法创建自定义哈希函数unordered_map?

时间:2015-02-05 22:47:45

标签: c++ boost unordered-map hash-function

我想为无序地图创建自定义哈希函数。我发现了这个问题: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’

我真的不确定如何解决这个问题,如果有人能帮助我那会很棒!谢谢!

1 个答案:

答案 0 :(得分:1)

此代码compiles just fine

#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;
}

您的问题可能在其他地方。