unordered_setのコンストラクターを見てきました。ハッシュバケットの数を設定せずに、カスタムアロケータインスタンスを使用してunordered_setを構築することはできませんか?カスタムアロケータが必要であり、型にはデフォルト値の定義がないため、実装の詳細をいじりたくありません。MSDNは、コンストラクターに対して3つのオーバーロードしか提供しませんが、どれもひどく有用ではありません。
編集:聖なるがらくた。std :: hashの私のSTL実装は、カスタムアロケータタイプの文字列に特化していません-明示的なtypedefs std::stringとstd::wstringのみを実行できます。つまり、ランダムな文字列をハッシュしようとしたくないのは理解できますが、カスタムアロケータがあるからですか?これは私をうんざりさせます。
tokens(std::unordered_set<string>().bucket_count(), std::hash<string>(), std::equal_to<string>(), stl_wrapper::hash_set<string>::allocator_type(this))
template<typename Char, typename CharTraits, typename Allocator> class std::hash<std::basic_string<Char, CharTraits, Allocator>>
: public std::unary_function<std::basic_string<Char, CharTraits, Allocator>, std::size_t> {
public:
size_t operator()(const std::basic_string<Char, CharTraits, Allocator>& ref) const {
return std::hash<std::basic_string<Char, CharTraits>>()(std::basic_string<Char, CharTraits>(ref.begin(), ref.end()));
}
};
問題を解決しますが、冗長な構造とコピーですか?Ewwwww。