2011-08-24 25 views
3

我有很多教科書注意到最初併入STL的哈希容器並不多,但大多數人也說大多數標準庫實現確實具有某種形式的哈希容器,因爲這是一個已知的缺陷。有沒有標準的C++散列容器?

這些書不一定是最新的越好,谷歌搜索的時候,所以我有點困惑什麼是真正的「標準」:在這個時間點

,做到最標準庫的實現提供一個相當一致的哈希容器,如果是的話,它是否被認爲是STL的一部分?

什麼是這個容器的「標準」標題? (我猜這是#include <hash>,但以防萬一!)。

是否有散列集和哈希映射單獨定義使用?

+0

另請參閱:http://stackoverflow.com/questions/5653097/stl-hash-functions –

回答

9

新的標準哈希映射容器叫做unordered_map。您可以通過#include <unordered_map>將它包含在您的文件中。它是現在批准的標準C++ 11的一部分。

C++ 11之前,你有各種各樣的東西像一些廠商的支持,所以你可以用它們hash_map這是(廣?),但是如果你做到了,你的代碼是不是真的便攜式因爲hash_map不是一部分的標準。 hash_map現在不應該使用散列表結構的所有其他供應商特定版本。

+1

不要忘記準標準'boost :: unordered_map'和co,它是當前標準的實驗基礎,因此提供了一個簡單的過渡。 –

2

不在當前標準(03)中,您可以使用boost::unordered_map。在新標準中,將有std::unordered_map

6

見C++ 11種類型:

  • unordered_map
  • unordered_set
  • unordered_multimap
  • unordered_multiset
+1

以及它們對非C++ 11編譯器用戶的支持。 – RedX

1

新的C++ 11標準具有散列相當於容器。目前它們並不在大多數實現中,但是它們一直在標準庫的TR1擴展中,這些擴展提供了一些實現。

1

TR1名稱空間中有一些散列容器。請參閱此處的簡短介紹:http://drdobbs.com/184402066

+0

tr1命名空間已經舊了。幾乎所有標準的C++ 0x版本都已經從tr1轉換爲std。 –

+0

我以爲C++ 0x仍在草稿中,不是嗎? –

+0

是的,標準仍在草案中,但所有優秀的編譯器已經把東西從tr1移到std(帶有適當的標誌)。 –