为什么std :: Hash对于不同的字符串有相同的结果? 我用msvc2010sp1,看到这个结果时,我很惊讶:为什么std :: Hash对于不同的字符串是相等的?
int _tmain(int argc, _TCHAR* argv[])
{
std::string sUniqId ("IndexBuf");
std::stringstream sStream;
sStream << 10;
std::string sUniqId10 (sUniqId);
sUniqId10.append (sStream.str());
size_t uHashStr = std::hash<std::string>()(sUniqId10);
sStream.str("");
sStream << 11;
std::string sUniqId11 (sUniqId);
sUniqId11.append(sStream.str());
size_t uHashStr1 = std::hash<std::string>()(sUniqId11);
sStream.str("");
sStream << 12;
std::string sUniqId12 (sUniqId);
sUniqId12.append(sStream.str());
size_t uHashStr2 = std::hash<std::string>()(sUniqId12);
cout <<"str: " << sUniqId10.c_str() << "\t" << "Hash1: " << uHashStr << endl;
cout <<"str2: " << sUniqId11.c_str() << "\t" << "Hash2: " << uHashStr1 << endl;
cout <<"str3: " << sUniqId12.c_str() << "\t" << "Hash3: " << uHashStr2 << endl;
return 0;
}
输出:
str: IndexBuf10 Hash1: 1286096800
str2: IndexBuf11 Hash2: 1286096800
str3: IndexBuf12 Hash3: 1286096800
有人知道为什么发生这种情况?
p.s.这个例子正确地为msvc2013更新1
重复? http://stackoverflow.com/q/7968674/420683 – dyp
@dyp不,他们解决了这个问题,VS2013实现遍历整个字符串。 angevad:我无法使用VS2013更新1重现您的结果。32位和64位编译器为3个字符串生成不同的哈希值。 – Praetorian
@Praetorian OP:“这个例子**对于msvc2013 update1工作正常**” – dyp