计算地图结构的哈希

Compute hash of map structure

本文关键字:哈希 结构 地图 计算      更新时间:2023-10-16

我想计算整个 unordered_map数据结构的哈希值。这使得可以轻松比较两个 map s是否包含完全相同的键值对。

显然,一个人可以在随附的对上迭代,然后构建一个长字符串,然后构建哈希,但我可以想象有更好的方法可以做到这一点。

目前,实际的哈希函数并不那么重要。我认为md5可以。sha当然也是如此。

有任何建议吗?

您将需要一个交换函数, boost::hash_combine 故意不是,因此具有不同内部顺序的相等的 unordered_map具有相等的哈西。为此,我建议仅X X X X hash。

template<typename UnorderedMap>
std::size_t hash(const UnorderedMap & um)
{
    boost::hash<typename UnorderedMap::value_type> elem_hash;
    auto combine = [&](size_t acc, typename UnorderedMap::const_reference elem){ return acc ^ elem_hash(elem); };
    return std::accumulate(um.begin(), um.end(), 0, combine);
}

您可以尝试使用boost的hash_combine()将每个条目的哈希相结合。如果您不想使用Boost,则可以使用单个哈希值的XORON来最终产生组合的哈希值。

此外,您可以通过以下答案进行描述,该答案描述了如何在不使用Hash组合的情况下比较2个地图:

链接到答案