我一直在研究 unordered_set 的构造函数。在不设置哈希桶数量的情况下,是否无法使用自定义分配器实例构造 unordered_set?我真的不想弄乱实现细节,因为我想要一个自定义分配器,并且该类型没有为默认值提供任何定义。MSDN 只为构造函数提供了三个重载,没有一个非常有用。
编辑:神圣的废话。我的std::hash 的STL 实现不会专门用于具有自定义分配器类型的字符串——它只能执行显式类型定义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()));
}
};
解决了问题,但重复建设和复制?呜呜呜。