1

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

boost.org言う

比較でデータの順序が問題にならないデータ (セットなど) のハッシュ値を計算する場合は、データが常に同じ順序で提供されるようにする必要があります。

わかりました、それは簡単に思えます-何らかの方法でデータをソートするだけですが、ハッシュするたびにこれを実行したくありません. 通常のmaporを使用してsetも機能する可能性がありますが、かなりの量の書き直しが必要になります。

さらに、これには、私が使用するすべての型が><<=または>=定義されている必要があり==std::hash.

順序が問題にならないようにコンテナーをハッシュするにはどうすればよいですか?

4

2 に答える 2