我目前正在寻找 std::map 的更好替代方案,并且遇到了帖子标题中提到的类。有人可以澄清它们之间的区别,不是在性能/API 方面,而是在它们与当前和未来标准相关的位置方面。
问问题
11336 次
3 回答
13
- 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 也有,但它的想法和界面几乎都是一样的。
于 2010-12-22T16:41:38.227 回答
2
中的标题是TR1 “草稿”<tr1/*>
中指定的内容。我相信其中很多可能会发展到 C++0x(尽管这不能保证,并且也存在不兼容更改的范围)。据我了解,是非标准(即供应商特定)扩展。Boost 还提供了一个unordered_map,如果您尝试针对不提供您提到的任何头文件的编译器,它可能会很方便。<ext/*>
于 2010-12-22T16:38:07.370 回答
0
如果您在谈论 ext/unordered_map,那么这是旧的 SGI/HP STL 组件。它与其他 unordered_maps 非常相似。我会使用 std::unordered_map 作为标准组件——这就是未来。
我知道旧的 SGI/HP 哈希容器由于某种原因几乎没有被包含在 C++98 标准中。
于 2011-05-11T02:02:47.913 回答