0

boost::hash 当然适用于 std::string,但它适用于 c 字符串吗?我尝试过以下代码,但charHash(s2)每次运行程序时结果都会发生变化。看来 boost::hash 是在 s2 的地址而不是 "Hello" 上生效的,所以哈希结果会随着 OS 分配的随机地址而变化。

std::string s = "Hello";
char *s2 = "Hello";
boost::hash<std::string> stringHash;
boost::hash<char *> charHash;

cout << stringHash(s) << endl; // always "758207331"
cout <<charHash(s2) << endl;   // it varies
4

1 回答 1

3

文档中:

由于它符合 TR1,因此它适用于:

  • 整数
  • 花车
  • 指针
  • 字符串

它还实现了 Peter Dimov 在 Library Extension Technical Report Issues List(第 63 页)的 issue 6.18 中提出的扩展,这增加了对以下内容的支持:

基本上,它是散列指针。如果你必须散列一个 C 字符串,你可以:

std::cout << stringHash(std::string(s2)) << std::endl;
// or the uglier...likely not equivalent
std::cout << boost::hash_range(s2, s2+strlen(s2)) << std::endl;
于 2013-08-30T01:14:44.830 回答