5

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

4

3 回答 3

6

我相信 gcc 将他们的 TR1 标头放入 中<tr1/unordered_map>,因此您应该获得 C++11 版本。但它们非常相似。

于 2011-05-10T00:37:10.440 回答
3

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

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

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

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

于 2011-05-11T01:48:31.017 回答
0

这在很大程度上取决于特定的编译器版本。例如,GCC 4.4 基本上只有一些宏开关供您选择适当地进行命名空间标记,-std=c++0x但最终总是会从tr1_impl/unordered_map.实际上,各个基类的实现确实不同;C++0x 版本到处都有 s 等等。tr1/unordered_map.hbits/unordered_map.h.../hashtable.hstd::forward

简短的回答:这取决于。

于 2011-06-15T06:40:10.880 回答