在 std::unordered_map 中,如何迭代哈希值?

In std::unordered_map, how to iterate over hashes?

提问人:Igor Polk 提问时间:10/5/2023 最后编辑:AmitIgor Polk 更新时间:11/15/2023 访问量:67

问:

每个键都有哈希值。获取这些哈希值的方法是什么?std::unordered_map

为什么?评估哈希函数与数据集的相关性。我可以从外部生成哈希值,但我可能无法访问所使用的哈希函数。

C++ C++11 哈希 标准无 序映射

评论

0赞 Brian61354270 10/5/2023
相关/可能的重复项:C++ std::unordered_map 中使用的默认哈希函数是什么?C++ 映射中的 terate 键
1赞 Brian61354270 10/5/2023
“unordered_map应该为每个键存储哈希值”并不完全正确。哈希映射通常不存储密钥的实际哈希值,因为这将是多余的。你所能做的最好的事情就是迭代密钥并计算每个密钥的关联哈希值。

答:

0赞 Amit 11/11/2023 #1

“我可能无法访问所使用的哈希函数。”

可以访问使用的哈希函数:

#include <unordered_map>
#include <iostream>

int main()
{
    const std::unordered_map<int, int> my_map = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    const auto hasher{ my_map.hash_function() };

    for (const auto& [key, value] : my_map) { // Structured bindings were introduced in C++17

        const auto hash_value = hasher(key);

        std::cout << "(h: " << hash_value << ", k: " << key << ", v: " << value << ")   ";
    }

    std::cout << std::endl;
}

演示

“评估哈希函数与数据集的相关性。”

可以通过将不同的类传递给其构造函数来提供自定义哈希函数。std::unordered_mapHash