使用 C++0x 的 unordered_map
Posted
技术标签:
【中文标题】使用 C++0x 的 unordered_map【英文标题】:Using unordered_map of C++0x 【发布时间】: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
。还是两者都一样?
【问题讨论】:
【参考方案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::forward
s 等等。
简短回答:视情况而定。
【讨论】:
以上是关于使用 C++0x 的 unordered_map的主要内容,如果未能解决你的问题,请参考以下文章