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. 任何人都可以告訴我這有什麼問題嗎?
- 7. 任何人都可以告訴我怎麼做這個圖像加載?
- 8. 任何人都可以告訴我爲什麼iam得到這個異常?
- 9. 任何人都可以告訴這個查詢有什麼問題嗎?
- 10. 任何人都可以告訴爲什麼這個Hibernate查詢無效嗎?
- 11. 任何人都可以告訴我這個小部件的名字是什麼?
- 12. 任何人都可以告訴我這個腳本有什麼問題嗎?
- 13. 任何人都可以告訴我這個ZeroMQ代碼有什麼問題嗎?
- 14. 任何人都可以告訴這個jscript文件是幹什麼的
- 15. 任何人都可以告訴我這個僞代碼有什麼問題嗎?
- 16. 任何人都可以告訴我什麼導致這個堆棧溢出?
- 17. 任何人都可以告訴這個字節碼是幹什麼的?
- 18. 任何人都可以告訴我什麼:x:用於?
- 19. 任何人都可以告訴我Oracle Enterprise Repository是什麼?
- 20. 任何人都可以告訴技能名稱是什麼?
- 21. 任何人都可以告訴我爲什麼「X509_verify」函數返回-1。
- 22. 任何人都可以告訴我這是什麼意思在PHP中?
- 23. 任何人都可以告訴我什麼考卷是在這裏要求嗎?
- 24. 任何人都可以告訴我我做錯了什麼嗎? - 堆棧
- 25. 在服務器上發現惡意PHP代碼 - 任何人都可以告訴這個代碼在做什麼?
- 26. 任何人都可以告訴我這是如何工作的?
- 27. 任何人都可以幫助我在這裏做什麼?
- 28. 任何人都可以告訴我這段代碼出了什麼問題嗎?
- 29. 任何人都可以告訴我這段代碼有什麼問題嗎?
- 30. 任何人都可以告訴我這裏使用的模塊
嗯,我會說它有一個錯誤。看到「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