boost :: hash对c字符串不起作用?

时间:2013-08-30 01:07:07

标签: c++ boost

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

1 个答案:

答案 0 :(得分:2)

来自documentation

  

由于它符合TR1,因此可以使用:

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

它还实施了Peter Dimov在图书馆扩展技术报告问题清单(第63页)第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;