使用C ++ 0x的unordered_map

时间:2011-05-10 00:27:46

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

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

所以,除非你专门做了这些事情或做了类似的“使用”,否则你就会得到标准的。

这些实现是分开的,但它们非常相似。只有足够的差异(initializer_list,比较操作)来维护一个包含所有条件和宏的文件。

答案 2 :(得分:0)

这在很大程度上取决于特定的编译器版本。例如,GCC 4.4基本上只有一些宏开关用于你的-std=c++0x选项来适当地进行命名空间标记,但总是最终从tr1_impl/unordered_map拉出实际代码,而GCC 4.6有两个完全独立的实现,tr1/unordered_map.h中的一个和bits/unordered_map.h中的一个 - .../hashtable.h中相应的基类实现确实不同; C ++ 0x版本到处都有std::forward等。

简短回答:这取决于。