如何覆盖 std::unorderedmap<T,T>::hash_function 到我自己的哈希函数

how override std::unorderedmap<T,T>::hash_function to my own hash function

我想将 std::unordered_map::hash_function 重写为我自己的哈希函数,有哪些方法可以实现

据我了解,您想使用散列函数来覆盖 std::unordered_map 的默认散列函数。或者,如果没有适用于您要使用的密钥类型的标准散列函数,则您必须实现自己的散列函数。 所以首先你需要编写自己的哈希函数并将其附加到命名空间 std 中 例子: 此 class

的哈希值
`class IntWrapper`
{
public:
   IntWrapper(int i) : m_wrappedInt{i} {}
   int getValue() const { return m_wrappedInt; }
   bool operator==(const IntWrapper&) const = default;
private:
   int m_wrappedInt;
};

将会

namespace std
{
template<> struct hash<IntWrapper>
{
size_t operator() (const IntWrapper& x) const {
    return std::hash<int>{} (x.getValue());
}
};
}

要为 IntWrapper 编写实际的哈希函数,您需要编写 std::hash class 的特化 IntWrapper 的模板。 std::hash class 模板在 中定义。这个专业 需要计算和 returns 的函数调用运算符的实现 给定 IntWrapper 实例。

unordered_map中有五个模板参数:key类型,value类型,hash类型,相等比较 类型和分配器类型。使用最后三个参数,您可以指定自己的哈希函数, 分别为相等比较函数和分配器函数。