【问题标题】:hash table/ unordered map in C++C ++中的哈希表/无序映射
【发布时间】:2011-06-18 08:21:43
【问题描述】:

我正在寻找一个我可以依赖的哈希映射模板,并在我需要哈希表时使用。我试图使用 hash_map 但发现它现在已弃用。尝试使用 unordered_map,但出现以下错误-

error: #error This file requires compiler and library support for the upcoming ISO C++ s        tandard, C++0x. This support is currently experimental, and must be enabled with the -s    td=c++0x or -std=gnu++0x compiler options.

现在,我完全糊涂了。我一直在 Java 中使用 hashmap,它非常简单。在 C++ 中并非如此。 指导我在 C++ 中使用什么以及如何使用哈希表。

【问题讨论】:

  • 嗯,许多事情在 C++ 中并不像在 Java 中那样“直截了当”。正式地,unordered_map 和 unordered_set 包含在 tr1 扩展中,因此 gnu 有可能在未激活 c++01 功能的情况下提供 c++03 实现。在这种情况下,您应该能够在包含 后使用 std::tr1::unordered_map
  • 我忘记了:您可能需要安装 boost。它提供了一个透明可用的 tr1 实现,包括仅基于 c++03 特性的哈希表。

标签: c++ templates stl hash hashtable


【解决方案1】:

按照错误信息执行,调用g++如下:

g++ -std=c++0x

接下来是其余的参数。

【讨论】:

    【解决方案2】:

    hash_map(或者更确切地说,unordered_map,因为它被称为避免名称冲突)在最新版本的 C++(c++0x 或 c++11)中,但许多编译器,包括你的,都支持在那之前。您的编译器很好,并且在未经您明确同意的情况下阻止您编写可能不可移植的代码。

    正如其他人所说,将-std=c++0x 添加到您的编译器选项将允许您使用hash_map,

    请注意,在其他地方编译该代码将需要一个相当现代的 c++ 编译器。 (这对您来说可能不是问题..如果您只是自学或不在办公室外共享代码,您应该没问题...)

    【讨论】:

    • hash_map 不在 C++0x 中,他们专门将其称为 unordered_map,以避免与许多不完全兼容的编译器特定的 hash_map 实现发生冲突。除了名字之外,它基本上是一样的。
    • @Sven:没错。我应该提到这一点。现已修复。
    【解决方案3】:

    编译时只需使用 -std=c++0x 即可,如错误消息所述!无论如何,C++ 中的普通map 接口已经相当优化,因此除非性能绝对关键,否则您应该只使用map 容器。

    【讨论】:

    • 我需要哈希表,地图不会;不能达到目的1
    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 2013-06-13
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多