无法创建自定义哈希函数 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’

我真的不知道如何解决这个问题,如果有人能帮助我,那就太好了!谢谢!

此代码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;
}

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