我想整体计算unordered_map
数据结构的哈希值。这样就可以轻松比较两个map
,无论它们是否包含完全相同的键值对。
很明显,人们可以遍历所包含的对,然后构建一个长字符串并对其进行哈希处理,但是我可以想象有更好的方法可以做到这一点。
目前,实际的哈希函数并不是那么关键。我认为md5
可以。 sha
当然也是。
有什么建议吗?
答案 0 :(得分:3)
您将需要一个交换组合函数,boost::hash_combine
不是故意的,因此具有不同内部顺序的相等unordered_map
具有相同的散列。为此,我建议对每个元素的哈希值进行异或运算。
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);
}
答案 1 :(得分:1)
您可以尝试使用boost的hash_combine()
来合并每个条目的哈希。如果您不想使用boost,则可以对各个散列值进行异或运算,最终得到合并的散列值。
此外,您还可以通过以下答案来说明如何在不使用哈希组合的情况下比较2个地图: