C++中字符串的獨特屬性是什麼?爲什麼它們可以通過關係運算符進行比較(例如,在嘗試按字母順序排序字符串數組時)?我試圖利用這個「屬性」來建立一個沒有每個可能的字符串衝突的表的罰款哈希函數。另外,什麼數據結構可以爲此工作?我正在考慮一個矢量,因爲我不得不通過一個文檔而不知道它裏面有多少個獨特的單詞,而且我只想查看一次這個文檔。字符串的獨特屬性以構建高效的哈希表
回答
C++標準字符串本質上是字符的向量。比較字符串意味着從一開始就逐字比較它們。 我不確定'unique property'是什麼意思,但是對於你的用例,任何哈希算法都應該這樣做。 如果我正確理解你的用例,你可能需要使用std :: set < YourHashType>或std :: map。這樣你就不必考慮是否已經添加了一個單詞。
最簡單的算法,計算出一個空結尾的C風格的字符串散列鍵如下:
UINT HashKey(const char* key) const
{
UINT nHash = 0;
while (*key)
nHash = (nHash<<5) + nHash + *key++;
return nHash;
}
您可能想看看[P0029R0](http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0029r0.html)中的組合方法,該方法能夠創建良好的(儘管可能不加密)散列值。 –
我同意這是一個複雜的話題,有很多方面,但我只是想提供一個基本的想法,如何實現一個字符串的哈希計算算法。 –
我想利用這一「屬性」,以建立一個對於每個可能的字符串都沒有碰撞的表格的精細哈希函數。
作爲pigeonhole principle的示例,您不能擁有無衝突散列函數。當您使用像std::strcmp
這樣的函數進行詞法比較時(例如逐字母)比較字符串時,字符串的排序是唯一的,但只會使用比較而不是字符串的固有唯一屬性給出唯一順序。
如果您有一組有限的密鑰,您可以設計一個無衝突散列函數,它被稱爲perfect hashing。
- 1. 低熵字母數字字符串的高效哈希函數
- 2. 傳遞哈希的獨特構造
- 3. 字符串到獨特的哈希在JavaScript/Jquery
- 4. 做出獨特的哈希出兩串
- 5. 哈希字符串
- 6. 基本字符串哈希/去哈希
- 7. 的Perl $字符串哈希錶轉換
- 8. 構建數據結構 - 哈希數組的哈希哈希
- 9. 在哈希表中創建字符串哈希值的時間複雜度
- 10. 用線性探測字符串哈希
- 11. MD5哈希特殊字符
- 12. 從字符串和int創建哈希
- 13. Groovy的屬性列表從哈希表
- 14. 使用構造鍵進行高效的哈希表訪問
- 15. 字符集獨立字符串等於,哈希碼和比較
- 16. 使用不可變字符串構建高效字符串
- 17. 字符串 'properties.dimensions.length' 來訪問哈希{屬性:{尺寸:{長度:23}}}
- 18. 「屬性應該是一個哈希,但是一個字符串」
- 19. 哈希名字符串
- 20. 哈希字符串大小
- 21. 字符串哈希轉換
- 22. 字符串到哈希中的符號
- 23. 哈希表在C(整型,字符串[])++
- 24. 轉換一個哈希表,以鍵值對的字符串
- 25. jQuery哈希屬性
- 26. 下拉列表的哈希'值'屬性
- 27. 在javascript中構建哈希表和完美的哈希函數
- 28. 使用哈希表查找字符串中的字符
- 29. python獨特的字符串創建
- 30. MySQL獨特的哈希插入
關係運算符通常是重載,它包含一些複雜函數,如c的'strcmp'。事實並非如此簡單。 – Petr
比較字符串就像比較基數 - 256位數字一樣。 –