我對C++比較陌生。在Java中,我很容易實例化並使用hashmap。我想知道如何在C++中以簡單的方式來完成它,因爲我看到了很多不同的實現,而且它們都不那麼簡單。C++中簡單的hashmap實現
30
A
回答
26
大多數編譯器應該爲你定義std::hash_map
;在即將到來的C++0x
標準中,它將作爲std::unordered_map
的標準庫的一部分。其上的STL Page是相當標準的。如果您使用Visual Studio,Microsoft上有一個頁面。
如果你想使用你的類作爲值,而不是作爲鍵,那麼你不需要做任何特殊的事情。所有原始類型(例如int
,char
,bool
乃至char *
)應該「只是作爲」hash_map
中的鍵。但是,對於其他任何事情,您將不得不定義自己的哈希和平等函數,然後編寫將它們包裝到類中的「函子」。
假設你的類被稱爲MyClass
,並且您已經定義爲:
size_t MyClass::HashValue() const { /* something */ }
bool MyClass::Equals(const MyClass& other) const { /* something */ }
您需要定義兩個函子來包裝對象的方法。
struct MyClassHash {
size_t operator()(const MyClass& p) const {
return p.HashValue();
}
};
struct MyClassEqual {
bool operator()(const MyClass& c1, const MyClass& c2) const {
return c1.Equals(c2);
}
};
和實例您hash_map
/hash_set
爲:
hash_map<MyClass, DataType, MyClassHash, MyClassEqual> my_hash_map;
hash_set<MyClass, MyClassHash, MyClassEqual> my_hash_set;
一切都應該工作之後,隨着預期。
3
嘗試助推的unordered類。
7
16
在C++中使用hashmaps很簡單!這就像使用標準的C++地圖。您可以使用您的編譯器/庫實現unordered_map
或使用boost或某個其他供應商提供的編譯器/庫實現。這是一個快速示例。你會發現更多,如果你按照你給的鏈接。
#include <unordered_map>
#include <string>
#include <iostream>
int main()
{
typedef std::tr1::unordered_map< std::string, int > hashmap;
hashmap numbers;
numbers["one"] = 1;
numbers["two"] = 2;
numbers["three"] = 3;
std::tr1::hash<std::string> hashfunc = numbers.hash_function();
for(hashmap::const_iterator i = numbers.begin(), e = numbers.end() ; i != e ; ++i) {
std::cout << i->first << " -> " << i->second << " (hash = " << hashfunc(i->first) << ")" << std::endl;
}
return 0;
}
2
退房Simple Hash Map (Hash Table) Implementation in C++與泛型類型鍵值對和分離鏈戰略的一個基本的哈希表。
相關問題
- 1. 在C++中實現簡單的getopt
- 2. HashMap實現中的分段錯誤C++
- 3. 如何實現簡單的C++函數
- 4. 簡單快捷的實現在C#
- 5. HashMap的實現:--- hashcode
- 6. Simpleton的簡單實現
- 7. 簡單的OpenID實現
- 8. 簡單的OpenGL實現
- 9. 實現最簡單的DHT
- 10. Keras簡單的RNN實現
- 11. 實現簡單的shell
- 12. 實現一個HashMap
- 13. 在C中實現一個簡單的python函數很簡單嗎?
- 14. 在QT(C++)中實現一個簡單的鼓機的技巧
- 15. laravel 5中簡單的websocket實現
- 16. 在AS3中最簡單的onReleaseOutside實現?
- 17. 關於Java HashMap的實現
- 18. 多個HashMap的實現
- 19. 如何在C#中實現一個簡單的通用比較#
- 20. 簡單堆棧實現
- 21. 最簡單的方法來實現一個極端簡單的服務器? (C#)
- 22. 在python中簡單實現會話?
- 23. 在C++中使用UDP簡單選擇實現
- 24. HashMap來實現鄰接表
- 25. 實現JavaScript ASP.NET C#的簡單場景,提問的問題
- 26. 在Java Hashmap中實現remove方法?
- 27. 如何在GWT中實現HashMap?
- 28. C++不同的單實現
- 29. 簡單的狀態消息實現
- 30. 實現一個簡單的線程池
我忘了告訴我正在使用Unix。你編碼的例子看起來很簡單,我會試試看。但是我應該創建自己的HashValue()方法,對吧?因爲Java有一個默認的Object類的hashcode()方法,所以我不知道它在C++中是如何工作的。 – 2008-11-05 19:53:29