我需要爲散列表提供插入/查找/刪除接口。我只寫了散列表來提供內部存儲桶/入口管理。散列函數應該從外部提供。我現在堅持如何公開接口,以便哈希表可以處理字節數組以及固定長度的數據類型。問題在於,對於字節數組,哈希函數需要知道數組的長度,而對於其他類型,它可以沒有這些信息。我的問題是我不能爲字節數組實現operator[]
,因爲散列函數需要兩個參數。我想保持operator[]
。有沒有什麼辦法解決這個問題(沒有專注於T*
,並在該專業化中拋出編譯器錯誤operator[]
)?關於模板專業化
Q
關於模板專業化
2
A
回答
1
我在這裏感到困惑,因爲我沒有得到散列表上的operator []與存儲在其中的數據類型的operator []衝突。
如果你的hash_table有operator [],它可能是你爲key []提供密鑰的hash_map,也可能是那個operator []返回一個單元格的內容。
通常,如果我確實實現了自己的散列表,我並不直接將數據存儲在條目中,而是將數據加上一些「元數據」,即與單元有關的信息。由於你的散列表支持刪除,所以你需要確保你仍然可以達到可能被移動到別處的任何衝突,無論你現在的策略是尋找這樣一個單元。因此,刪除的單元格可用,但與從未佔用過的單元格有不同的含義,因爲它可能是碰撞過程中路徑的一部分。如你所說,散列函數是獨立的。它獨立於存儲機制,並且根本不調用哈希表的operator []。
散列表僅使用散列函數和比較函數,否則使用其自己的存儲策略和衝突處理策略。
0
可以處理字節數組以及固定長度的數據類型
所以,你的字節數組的大小而變化。你需要記錄每個地方的長度。如果你想通過值將它們存儲在哈希表中,那麼你可以將數據和長度值打包在一個對象中:STL已經提供了一些類適用於這個類,包括std :: vector和std :: string < >。或者,如果您只希望哈希表存儲指向您的字節數組的指針/引用,則可以創建一個普通的「句柄」類,它可以存儲或知道在哪裏查找長度,並且具有指向/指向數據的指針/引用。
正如「CashCow」指出的,字節數組上的operator[]
與散列表上的operator[]
之間沒有固有衝突......如果需要,它們甚至可以鏈接在一起。
相關問題
- 1. 模板專業化模板
- 2. 模板專業化
- 3. 模板專業化
- 4. 模板專業化
- 5. 模板專業化
- 6. 模板專業化
- 7. 模板專業化
- 8. 模板專業化
- 9. 查詢C++模板專業化和部分模板專業化
- 10. 模板作爲專業化
- 11. 模板專業化幫助
- 12. 模板專業化問題
- 13. 模板專業化和C++
- 14. 專業化模板函數
- 15. 模板類專業化
- 16. 模板專業化需要
- 17. 模板專業化問題
- 18. C++模板專業化
- 19. 總模板專業化
- 20. 模板專業化C++ 98
- 21. 模板專業化參數
- 22. 成員模板專業化
- 23. 曖昧模板專業化
- 24. 模板類專業化
- 25. 模板專業化別名
- 26. 模板半專業化
- 27. 模板專業化優先
- 28. 模板專業化實現
- 29. 模板專業化與類
- 30. typedef和模板專業化
+1。我猜哈希表不應該知道密鑰的字節佈局。我將爲字節數組鍵實現一個包裝類。 – nakiya 2011-01-19 09:56:03