【问题标题】:Using unordered_map of C++0x使用 C++0x 的 unordered_map
【发布时间】:2011-05-10 00:27:45
【问题描述】:

我正在使用unordered_map,其中包括: #include <unordered_map> 程序编译如下: g++ Test.cc -std=gnu++0x -o test 我使用的是 TR1 的 unordered_map 还是 C++0x 的 unordered_map。还是两者都一样?

【问题讨论】:

    标签: c++ c++11 g++ unordered-map


    【解决方案1】:

    我相信 gcc 将他们的 TR1 标头放在 <tr1/unordered_map> 中,所以你应该得到 C++11 版本。但它们非常相似。

    【讨论】:

    • 我确认 gcc 4.5.2(mingw 端口,如果重要的话)。
    【解决方案2】:

    GCC 在 tr1 子目录中有 tr1 头文件。另外还有 tr1 命名空间。

    #include <tr1/unordered_map>
    ...
    std::tr1::unordered_map<...>(...);
    

    因此,除非您专门做了这些事情或做了类似的“使用”,否则您已经得到了标准。

    实现是分开的,但它们非常相似。有足够的差异(initializer_list、比较操作)使得维护一个包含所有条件和宏的文件变得很痛苦。

    【讨论】:

      【解决方案3】:

      这在很大程度上取决于特定的编译器版本。例如,GCC 4.4 基本上只是为您的-std=c++0x 选项提供了一些宏开关来适当地进行命名空间标签,但最终总是会从tr1_impl/unordered_map 中提取实际代码,而 GCC 4.6 有两个完全独立的实现,一个在 @ 987654323@ 和bits/unordered_map.h 中的一个——以及.../hashtable.h 中各自的基类实现实际上是不同的; C++0x 版本到处都有std::forwards 等等。

      简短回答:视情况而定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 2017-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多