我正在使用一组无序的std :: strings。为它指定哈希函数的推荐方法是什么?目前它正在使用默认值。我是否需要明确指定一个可以表现更好的?
答案 0 :(得分:1)
std::string
的标准专业化对于字符串来说可能已经足够好(甚至可能非常好)。但是如果您使用非常特定格式的字符串,您可能会为您的特定情况找到或设计更好的算法。
答案 1 :(得分:0)
没有必要提供自己的。如果您使用的是VS 2010,std::string
的哈希函数位于xfunctional
包含的<functional>
头文件中,如果您想了解它是否符合您的需求:
template<>
class hash<_STD string>
// ...
答案 2 :(得分:0)
您可以查看wiki,在那里您可以看到为了指定哈希函数,您应该编写如下内容:
std::unordered_map<X,int,hash_X> my_map;
其中hash_X是散列函数的定义。
为了完整性,我包括了wiki
中定义的代码struct X{int i,j,k;};
struct hash_X{
size_t operator()(const X &x){
return hash<int>()(x.i) ^ hash<int>()(x.j) ^ hash<int>()(x.k);
}
};
答案 3 :(得分:0)
我仍然没有想出如何在答案中添加小评论...我更愿意在迈克尔伯尔的答案下发布这个。无论如何,c ++ 11有std::hash<string>
作为库的一部分。 Here您可以查看所有支持的哈希函数。