我是一個java傢伙..學習C++。我正在嘗試在C++中使用地圖std::map
。不知何故,我也需要重寫它的哈希碼和equals方法。我可以使用unordered_map
在C++ 11中做到這一點,但我怎麼能在舊版本中做到這一點。我知道在std::map
,第三個參數是operator<
但不是哈希碼(如在unordered_map
)。我也知道std::map
(有序地圖)實際上是一個TreeMap(紅黑樹)。但我怎麼做,我想要做的,使用這個數據結構或其他一些舊的c + +版本。C++舊版本(不是C++ 11) - 地圖 - >重寫哈希碼
0
A
回答
5
正如您所說,std :: map與Java的TreeMap類似。在Java中重寫TreeMap的哈希代碼沒有用,因爲它不會被集合使用。相反,TreeMap需要一個(可選)附加參數:比較器。
的std ::地圖做幾乎同樣的事情,但不是一個運行參數,它有一個編譯時模板參數:
template <class Key, class T, class Compare = less<Key> [...]>
class map;
正如你所看到的,這個默認爲std ::少。這可以通過兩種不同的方式重寫:
- 要麼通過選擇性專業化爲您的密鑰類型定義新的std :: less。這將其全球範圍內使用,或
- 聲明時,你的地圖
1版提供自定義比較結構:
template<>
struct std::less<Key> {
bool operator()(const &Key lhs, const Key &rhs) const
{
// compare lhs with rhs
}
};
版本2:
struct CompareKeys {
bool operator()(const &Key lhs, const Key &rhs) const
{
// compare lhs with rhs
}
};
std::map<Key, Value, CompareKeys> my_map;
C++ 14及更高版本會稍微改變聲明,但機制mor e或更少保持不變。
+1
版本3:重載'bool操作符<(const Key&,const Key&);' – fredoverflow 2015-03-02 11:54:05
+2
但是不要因爲污染了其他所有東西。 – 2015-03-02 11:58:31
相關問題
- 1. C++ 11 unordered_set與std :: owner_less-like哈希
- 2. C++重寫哈希<T>對於T的派生類
- 3. 的Java地圖哈希碼
- 4. 地圖哈希表
- 5. 哈希地圖與<Key,Value>
- 6. C#HMACSHA1哈希是不正確
- 7. 重寫哈希碼,等於在java中
- 8. SQL bigint哈希匹配c#int64哈希
- 9. sha1哈希不工作? C#
- 10. 多個版本的哈希密碼
- 11. SQL 2005 MD5哈希和C#MD5哈希
- 12. htaccess的重寫哈希AJAX
- 13. C#MD5哈希Groovy的MD5哈希
- 14. 重現SqlMembershipProvider密碼哈希
- 15. 本地C++編寫C#託管代碼
- 16. C++哈希算法
- 17. Mod重寫+哈希標記
- 18. ASP.NET MVC/C# - Linq和哈希密碼
- 19. c + +重寫>>操作
- 20. 舊版發行版本上的二進制兼容性(使用C++ 11)
- 21. Symfony2(FOSUserBundle)SHA512哈希不匹配C#SHA512哈希
- 22. C#哈希密碼創建鹽問題
- 23. C#SHA-2(512)Base64編碼哈希
- 24. 通過在C哈希碼位運算
- 25. 這個java地圖代碼的C++版本是什麼
- 26. C#哈希或版本檢查解決方案建議?
- 27. MYSQL 4密碼哈希 - > MYSQL 5
- 28. 地圖互斥C++ 11
- 29. 如何讓我的C代碼自動打印出其Git版本哈希?
- 30. 運算符重載C++:只寫版本
如果你使用的是舊版本的visual studio,你可以使用非標準的[stdext :: hash_map](https://msdn.microsoft.com/en-us/library/6x7w9f6z(v = vs.100) )的.aspx)。但真正的答案應該是,如果你正在學習,並且沒有任何要求使用舊的編譯器,爲什麼不只是得到一個包含C++ 11的最新工具集? – 2015-03-02 11:16:43
你可能必須去[BOOST](http://www.boost.org/doc/libs/1_57_0/doc/html/unordered.html)。 – 2015-03-02 11:17:48
我知道hash_map,但由於我不能使用它,因爲它不是標準庫的一部分 – Learner 2015-03-02 11:18:31