我目前正在寻找一种更好的STD :: MAP的替代方法,并遇到了帖子标题中提到的课程。有人可以阐明它们之间的差异,而不是在性能/API方面,而是在与当前和即将到来的标准方面相关的位置。

有帮助吗?

解决方案

  • STD :: MAP:当前的C ++标准关联容器(键/值),可用作树背后的树;
  • STD :: UNOREDED_MAP:下一个标准(C ++ 0x-或技术报告1中)哈希映射容器,可作为Hash Map。
  • STD :: TR1 :: UNOREDED_MAP:与上一个但在TR1名称空间中相同,通常是在希望提供TR1扩展名但在另一个名称空间中的编译器中找到的。
  • ext :: unordered_map:仍然是相同的想法,但是编译器特定的实现,因此不能保证与sTD :: unordered_map完全相同,在接口和实现上。

如果可以的话,请使用std :: unordered_map,因为它是哈希地图实现的最终名称(如果需要哈希地图)。如果您的编译器向它们提供,但其他名称就在那里,但在单独的名称空间中(因为C ++ 0x尚未正式可用)。

顺便说一句,也有boost :: unordered_map,但几乎都是相同的想法和界面。

其他提示

标题进入 <tr1/*> 是在 TR1 '草稿'。我相信其中很多可能会发展为C ++ 0x(尽管不能保证这是不兼容的更改的范围)。 <ext/*> 据我了解,是非标准(即特定于供应商)的扩展。 Boost还提供了 unordered_map 如果您要针对没有提及的标题的编译器,则可能会很方便。

如果您谈论的是ext/unordered_map,那么这是旧的SGI/HP STL组件。它与其他unordered_maps非常相似。我将使用std :: unordered_map作为标准组件 - 这就是未来。

我知道由于某种原因,旧的SGI/HP哈希容器几乎没有错过C ++ 98标准。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top