size_t hash(const std::string data) {
size_t h(0);
for (int i=0; i<data.length(); i++){
h = (h << (31-i)^(h >> i)^data[i]);
}
h = h%hashsize;
return h;
}
1
A
回答
3
这对std::string
的哈希函数,表面上是适合TR1和C++ 11的std::unordered_map<>
,std::unordered_set<>
等即,它试图在给定std::string
用于创建作为唯一-AS-可能size_t
值散列表。
这就是说,这是一个糟糕的散列函数。与unordered_map<>
,unordered_set<>
等一起提供的任何标准库实现都会为标准库字符串提供内置哈希函数,这些函数的实现比这个更好。
编辑:(响应于评论)<<
是按位左移,>>
是逐位右移,并^
是按位异或,所有这些在此Wikipedia条目简要讨论:Bitwise operation。
相关问题
- 1. 任何人都可以告诉这个cronjob做什么?
- 2. 任何人都可以告诉这个logcat说什么?
- 3. 任何人都可以告诉我做错了什么?
- 4. 任何人都可以告诉我这有什么问题吗?
- 5. 任何人都可以告诉我这是什么功能吗?
- 6. 可以任何一个告诉i2d_X509_SIG()函数做什么..?
- 7. 任何人都可以告诉我怎么做这个图像加载?
- 8. 任何人都可以告诉我这个ZeroMQ代码有什么问题吗?
- 9. 任何人都可以告诉这个jscript文件是干什么的
- 10. 任何人都可以告诉这个字节码是干什么的?
- 11. 任何人都可以告诉为什么这个Hibernate查询无效吗?
- 12. 任何人都可以告诉我这个脚本有什么问题吗?
- 13. 任何人都可以告诉这个查询有什么问题吗?
- 14. 任何人都可以告诉技能名称是什么?
- 15. 任何人都可以告诉我Oracle Enterprise Repository是什么?
- 16. 任何人都可以告诉我什么:x:用于?
- 17. 任何人都可以告诉我为什么“X509_verify”函数返回-1。
- 18. 任何人都可以告诉我什么考卷是在这里要求吗?
- 19. 任何人都可以告诉我这是什么意思在PHP中?
- 20. 任何人都可以告诉我我做错了什么吗? - 堆栈
- 21. 任何人都可以告诉我这段代码有什么问题吗?
- 22. 任何人都可以告诉我这段代码出了什么问题吗?
- 23. 任何人都可以向我解释这preg_match()函数做什么?
- 24. 有人可以告诉我为什么这个JavaScript函数不执行?
- 25. 任何人都可以告诉我为什么显示“运行时错误”?
- 26. 任何人都可以告诉我为什么datetimepicker给数据检索错误?
- 27. 任何人都可以告诉我,我在这个JQuery脚本错了
- 28. 任何人都可以解释这一行的HTML在做什么?
- 29. 任何人都可以告诉我为什么我的println声明是这样做的
- 30. 任何人都可以告诉我如何在Rails3中做链接标记吗?
嗯,我会说它有一个错误。看到“31”和size_t一起使用意味着它可能不会混合它想要混合的方式。 – ohmantics 2011-04-15 05:55:43
这将需要大量的铅笔和纸张工作。函数调用的上下文是什么? – pjwilliams 2011-04-15 05:57:29
我发现这在网络的某个地方,并且不理解这个h =(h <<(31-i)^(h >> i)^ data [i]); ' – Vijay 2011-04-15 05:58:52