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
orを使用してset
も機能する可能性がありますが、かなりの量の書き直しが必要になります。
さらに、これには、私が使用するすべての型が>
、<
、<=
または>=
定義されている必要があり==
、std::hash
.
順序が問題にならないようにコンテナーをハッシュするにはどうすればよいですか?