【问题标题】:what are the differences between these in C++?这些在 C++ 中有什么区别?
【发布时间】:2012-02-25 15:28:22
【问题描述】:

我是 Java 的忠实粉丝,但我现在必须在 C++ 上工作以完成一个项目。我打算给你一个 c++ 中的 java hashmap 类型的功能。谷歌搜索后,我发现 C++ STL 库中不存在 hashmap/hashtable。但我发现了这些数据类型:map、unordered_map、unorderd_set 和 hash_map。 hash_map 是微软的特定 dll/库,其余在 STL 下使用。我必须在 IBM XL C/C++ 编译器上工作。所以我不能使用 microsoft/boost,因为我的公司不推荐它们。我必须使用特定于 STL 的所有内容。请提供有关这些收藏的一些信息。如果我必须选择 hashmap 功能,在这些 STL 细节中什么是最好的?提前致谢。

【问题讨论】:

  • 即使是半感兴趣的第二眼也应该向您揭示unordered_map/set 是一个哈希容器。它是 C++11、Boost 和 TR1 的一部分,其中任何一个都可以解决问题。

标签: c++ map hashmap set


【解决方案1】:

unordered_map 等价于 java 的 HashMap,并且是一个哈希映射 - 所以它可能是你所追求的。

map 等价于 java 中的 TreeMap。它被实现为red-black tree

unordered_set 等价于 java 的HashSet。它只包含键,而不是成对的(key,value)

【讨论】:

    【解决方案2】:

    您是否阅读了associative containers in C++ 上的维基百科页面?

    如果您想要真正的哈希表(使用提供哈希码的键,但键之间没有顺序),您可以使用 C++ 2011 std::unordered_map 模板。你需要一个足够新的编译器,以便在这方面与 C++11 兼容。

    如果您可以提供密钥顺序,还可以考虑使用 std::map,即使在较旧的 C++03 标准中也可用。

    【讨论】:

    • 如果订单无关紧要怎么办?我的意思是,我需要的只是一个键值对集合,它根据键存储值,并在需要时检索给定键的值。
    • 如果您仅限于 C++03(不是 C++11,不是 TR1,不是 boost),那么将值与键关联的最简单方法是在该键类型上提供一些顺序,然后使用std::map。该顺序对您来说可能并不“重要”,但可能很容易提供。
    • 那么std::map<std::string,std::string>应该没问题...因为STL提供了std::string上的订单
    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2010-09-18
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多