【发布时间】:2018-03-12 01:44:39
【问题描述】:
我正在为任意字符串单词(最大可能长度
int getKey(string value){
int key = 0;
int temp = 0;
int length = value.length();
for (int i = 0; i < length; i ++){
temp = (int)value[i];
key = key + temp;
}
return key;
}
但是,我很快意识到这种方法会导致太多重复(例如,由相同字母组合组成的单词)。所以我想知道是否有办法获得一个 C++ int 表示的哈希值,该值对于给定长度下的任何单词都是唯一的?
谢谢!
【问题讨论】:
-
你考虑过
std::hash吗? -
散列函数的一个基本属性是,如果生成的散列具有
n位的精度,那么对于所有大于n位的可能输入集,它在数学上不可能是唯一的。因此,如果您需要一个“对给定长度下的任何单词唯一”的散列函数,则散列函数必须产生一个长度相同的字节数的结果。换句话说,散列函数与要散列的字符串相同。 Q.E.D. -
谷歌“哈希函数”,你会发现大量的例子和理论可以帮助你。如果您已经这样做了,请编辑您的问题并讨论您发现了什么以及为什么它对您不起作用。
-
使用东西的总和作为哈希是不好的,因为某些值比其他值有更高的返回机会,因为它们可以以多种不同的方式求和。 idownvotedbecau.se/noresearch 快速搜索“字符串哈希”会给你答案。
标签: c++ string hash integer hashtable