2011-05-10 47 views
5

unordered_map我使用被包括作爲unordered_map#include <unordered_map> 並且程序如下編譯: g++ Test.cc -std=gnu++0x -o test 我使用TR1的unordered_map或的C++ 0x的。或者它們都是一樣的?使用的的C++ 0x

回答

6

我相信,海灣合作委員會提出的TR1頭在<tr1/unordered_map>,所以你應該得到的C++ 11版本。但他們非常相似。

+1

我確認gcc 4.5.2(mingw端口,如果有的話)。 – 2011-05-10 06:29:32

3

GCC有TR1頭在TR1子目錄。另外還有tr1命名空間。

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

所以除非你專門做了這些事情或做了類似的「使用」,你已經得到了std的。

這些實現分裂,但他們是相當類似的。剛好有足夠的差異(initializer_list,比較操作)來維護一個文件,所有的條件和宏都很痛苦。

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到處都是等

簡短的回答:這要看情況。