簡體   English   中英

C ++ <map> VS <unordered_map> VS <tr1/unordered_map> VS <ext/unordered_map>

[英]C++ <map> vs <unordered_map> vs <tr1/unordered_map> vs <ext/unordered_map>

我正在尋找一個更好的替代std :: map並且遇到帖子標題中提到的類。 有人可以澄清它們之間的差異,不是在性能/ API方面,而是在它們與當前和未來標准相關的方面。

  • std :: map:當前C ++標准關聯容器(鍵/值),作為后面的樹;
  • std :: unordered_map:下一個標准(C ++ 0x - 或技術報告1)哈希映射容器,用作...哈希映射。
  • std :: tr1 :: unordered_map:與前一個名稱相同但在tr1名稱空間中,經常出現在希望提供TR1擴展但在std之外的另一個名稱空間中的編譯器中。
  • ext :: unordered_map:仍然是相同的想法,但編譯器特定的實現,所以它不能保證與接口和實現上的std :: unordered_map完全相同。

如果可以,請使用std :: unordered_map,因為它是哈希映射實現的最終名稱(如果需要哈希映射)。 其他名稱是存在的,以防您的編譯器提供它們但在一個單獨的命名空間(因為C ++ 0x尚未正式提供)。

順便說一下,還有boost :: unordered_map,但它幾乎都是相同的想法和界面。

<tr1/*>中的標題是在TR1'draft '中指定的內容。 我相信很多這些可能會進入C ++ 0x(雖然這不能保證,並且存在不兼容的更改的余地)。 根據我的理解, <ext/*>是非標准的(即特定於供應商的)擴展。 Boost還提供了一個unordered_map ,如果你試圖定位沒有提供你提到的頭文件的編譯器,這可能很方便。

如果你在談論ext / unordered_map,那么這就是舊的SGI / HP STL組件。 它與其他unordered_maps非常相似。 我會使用std :: unordered_map作為標准組件 - 這就是未來。

據我所知,由於某種原因,舊的SGI / HP哈希容器幾乎不會被包含在C ++ 98標准中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM