计算地图结构的哈希
Compute hash of map structure
我想计算整个 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个地图:
链接到答案
相关文章:
- 如何计算结构的哈希
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 将私有结构哈希器运算符转换为静态
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 无法迭代结构"string"的哈希映射:[列表] C++
- 计算地图结构的哈希
- C 无序的设置问题与结构哈希
- 默认情况下,使 std 的数据结构使用我现有的非静态哈希函数"hashCode()"
- 名称和伪ID的数据结构:使用哈希表或bst
- 对于具有 3 个无符号字符和一个 int 的结构来说,对于unordered_map来说,什么是好的哈希函数?
- 在C 11中具有哈希地图结构的最直接侵略是什么
- 将哈希函数定义为结构的一部分
- 这是什么C++语言结构:#(即哈希)整数"path_to_header_or_cpp_file"<integer>?
- 哈希表(数据结构)
- 索引链表(哈希表中的索引)的C++/STL 结构
- C++-向结构中添加哈希映射
- 存储具有字符串类型键的哈希值的最佳结构
- 对于哈希表,通常使用哪些数据结构来保存哈希表
- TBB并发哈希映射作为结构的成员