C++ boost::hash不';不适用于c字符串?

C++ boost::hash不';不适用于c字符串?,c++,boost,C++,Boost,hash当然适用于std::string,但它适用于c string吗? 我尝试了以下代码,但是每次运行程序时,charHash(s2)结果都会发生变化。看起来boost::hash对s2的地址而不是“Hello”生效,所以hash结果随操作系统分配的随机地址而变化 std::string s = "Hello"; char *s2 = "Hello"; boost::hash<std::string> stringHash; boost::hash<char *> ch

hash当然适用于std::string,但它适用于c string吗? 我尝试了以下代码,但是每次运行程序时,
charHash(s2)
结果都会发生变化。看起来boost::hash对s2的地址而不是“Hello”生效,所以hash结果随操作系统分配的随机地址而变化

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
std::string s=“Hello”;
char*s2=“你好”;
boost::hash stringHash;
boost::hash charHash;
cout来自:

由于它符合TR1,它将与以下设备一起工作:

  • 整数
  • 漂浮
  • 指针
它还实现了Peter Dimov在图书馆扩展技术报告问题列表(第63页)第6.18期中提出的扩展,这增加了对以下内容的支持:

  • 阵列
  • std::pair
  • 标准容器
基本上,它是散列指针。如果必须散列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;
std::cout来自:

由于它符合TR1,它将与以下设备一起工作:

  • 整数
  • 漂浮
  • 指针
它还实现了Peter Dimov在图书馆扩展技术报告问题列表(第63页)第6.18期中提出的扩展,这增加了对以下内容的支持:

  • 阵列
  • std::pair
  • 标准容器
基本上,它是散列指针。如果必须散列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;

std::cout,因为它在散列指针的值,而指针的值在程序每次执行时都应该是随机的?@WiSaGaN,我猜是这样的。我正在寻找一种对c字符串进行散列的方法。只需使用
std::string
版本的散列,使用
stringHash(std::string(s2))
。因为它是对指针的值进行散列,指针的值在程序每次执行时都应该是随机的?@WiSaGaN我猜到了。我正在寻找一种在c字符串上散列的方法。只需使用
std::string
版本的散列,使用
stringHash(std::string(s2))
。boost::hash_range()就是我要找的。谢谢我要找的是hash_range()。谢谢