我有很多教科書注意到最初併入STL的哈希容器並不多,但大多數人也說大多數標準庫實現確實具有某種形式的哈希容器,因爲這是一個已知的缺陷。有沒有標準的C++散列容器?
這些書不一定是最新的越好,谷歌搜索的時候,所以我有點困惑什麼是真正的「標準」:在這個時間點
,做到最標準庫的實現提供一個相當一致的哈希容器,如果是的話,它是否被認爲是STL的一部分?
什麼是這個容器的「標準」標題? (我猜這是#include <hash>
,但以防萬一!)。
是否有散列集和哈希映射單獨定義使用?
我有很多教科書注意到最初併入STL的哈希容器並不多,但大多數人也說大多數標準庫實現確實具有某種形式的哈希容器,因爲這是一個已知的缺陷。有沒有標準的C++散列容器?
這些書不一定是最新的越好,谷歌搜索的時候,所以我有點困惑什麼是真正的「標準」:在這個時間點
,做到最標準庫的實現提供一個相當一致的哈希容器,如果是的話,它是否被認爲是STL的一部分?
什麼是這個容器的「標準」標題? (我猜這是#include <hash>
,但以防萬一!)。
是否有散列集和哈希映射單獨定義使用?
新的標準哈希映射容器叫做unordered_map
。您可以通過#include <unordered_map>
將它包含在您的文件中。它是現在批准的標準C++ 11的一部分。
C++ 11之前,你有各種各樣的東西像一些廠商的支持,所以你可以用它們hash_map
這是(廣?),但是如果你做到了,你的代碼是不是真的便攜式因爲hash_map
不是一部分的標準。 hash_map
現在不應該使用散列表結構的所有其他供應商特定版本。
不要忘記準標準'boost :: unordered_map'和co,它是當前標準的實驗基礎,因此提供了一個簡單的過渡。 –
不在當前標準(03)中,您可以使用boost::unordered_map
。在新標準中,將有std::unordered_map
。
見C++ 11種類型:
unordered_map
unordered_set
unordered_multimap
unordered_multiset
以及它們對非C++ 11編譯器用戶的支持。 – RedX
新的C++ 11標準具有散列相當於容器。目前它們並不在大多數實現中,但是它們一直在標準庫的TR1擴展中,這些擴展提供了一些實現。
TR1名稱空間中有一些散列容器。請參閱此處的簡短介紹:http://drdobbs.com/184402066
tr1命名空間已經舊了。幾乎所有標準的C++ 0x版本都已經從tr1轉換爲std。 –
我以爲C++ 0x仍在草稿中,不是嗎? –
是的,標準仍在草案中,但所有優秀的編譯器已經把東西從tr1移到std(帶有適當的標誌)。 –
另請參閱:http://stackoverflow.com/questions/5653097/stl-hash-functions –