繁体   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