【问题标题】:how override std::unorderedmap<T,T>::hash_function to my own hash function如何将 std::unordered_map<K,T>::hash_function 覆盖为我自己的哈希函数
【发布时间】:2021-10-09 07:43:44
【问题描述】:

我想将 std::unordered_map::hash_function 覆盖为我自己的哈希函数,有哪些方法可以做到这一点

【问题讨论】:

标签: c++ stl std unordered-map


【解决方案1】:

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

`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 类的特化 IntWrapper 的模板。 std::hash 类模板定义在 .这个专业 需要一个函数调用运算符的实现,该运算符计算并返回 a 的哈希值 给定 IntWrapper 实例。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2015-09-14
    • 2016-05-26
    • 1970-01-01
    • 2022-11-02
    • 2011-11-05
    • 2016-03-05
    相关资源
    最近更新 更多