我正在寻找散列无序容器,例如unordered_map
and unordered_set
。对于有序类型,如向量,boost::hash_range(v.begin(). v.end())
效果很好,但它也依赖于顺序,例如
#include <boost/functional/hash.hpp>
#include <functional>
namespace std {
template<>
struct hash<std::vector<int>> {
size_t operator ()(const std::vector<int>& v) const noexcept {
return boost::hash_range(v.begin(), v.end());
}
};
}
这个工作的例子:https ://coliru.stacked-crooked.com/a/0544c1b146ebeaa0
如果您正在计算数据的哈希值,其中数据的顺序在比较中并不重要(例如一组),您将必须确保数据始终以相同的顺序提供。
好的,这看起来很容易——只需以某种方式对数据进行排序,但我不想每次散列时都这样做。使用正常map
或set
可以工作,但我需要做一些重写。
此外,这将要求我使用的每种类型都具有>
、或定义<
,以及和。<=
>=
==
std::hash
如何对容器进行哈希处理以使顺序无关紧要?