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
答案 0 :(得分:2)
由于它符合TR1,因此可以使用:
- 整数
- 浮
- 指针
- 字符串
它还实施了Peter Dimov在图书馆扩展技术报告问题清单(第63页)第6.18期中提出的扩展,这增加了对以下内容的支持:
- 阵列
- 的std ::对
- 标准容器。
- extending boost::hash for custom types。
基本上,它是散列指针。如果必须散列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;