【发布时间】:2017-12-04 02:43:19
【问题描述】:
我只是好奇为什么这两个函数会产生不同的结果。
unsigned long Hash1(const string s)
{
int length = s.length();
unsigned long h = 1;
for (int i = 0; i < length; i++)
h *= 101 + (unsigned long)s[i];
return h;
}
unsigned long Hash2(const string s)
{
int length = s.length();
unsigned long h = 1;
for (int i = 0; i < length; i++)
h = h * 101 + (unsigned long)s[i];
return h;
}
int main()
{
cout << "Value of hash1 = " << Hash1("kelvin@gmail.com") << endl;
cout << "Value of hash2 = " << Hash2("kelvin@gmail.com") << endl;
system("pause");
return 0;
}
h *= 101 + (unsigned long)s[i] 不等于to h = h * 101 + (unsigned long)s[i]?
这是输出:
hash1 的值 = 1693843456
hash2 的值 = 2162085645
感谢您的帮助!!!
【问题讨论】:
-
您没有
h*= 101或h = h * 101。你有h *= 101 + (unsigned long)s[i]和h = h * 101 + (unsigned long)s[i]。 -
你实际上是在告诉它..
h = h * (101 + s[i]).. 换句话说,h = 自身乘以整个右侧表达式。
标签: c++ key hash-function