unordered_mapandなどの順序付けられていないコンテナーをハッシュしようとしてい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
比較でデータの順序が問題にならないデータ (セットなど) のハッシュ値を計算する場合は、データが常に同じ順序で提供されるようにする必要があります。
わかりました、それは簡単に思えます-何らかの方法でデータをソートするだけですが、ハッシュするたびにこれを実行したくありません. 通常のmaporを使用してsetも機能する可能性がありますが、かなりの量の書き直しが必要になります。
さらに、これには、私が使用するすべての型が>、<、<=または>=定義されている必要があり==、std::hash.
順序が問題にならないようにコンテナーをハッシュするにはどうすればよいですか?