Использование unordered_map из C ++ 0x - PullRequest
5 голосов
/ 10 мая 2011

Я использую unordered_map, который включен как: #include <unordered_map>, и программа компилируется следующим образом: g++ Test.cc -std=gnu++0x -o test Использую ли я unordered_map TR1 или C ++ 0x.Или это одно и то же?

Ответы [ 3 ]

6 голосов
/ 10 мая 2011

Я считаю, что gcc помещает свои заголовки TR1 в <tr1/unordered_map>, поэтому вы должны получить версию C ++ 11.Но они очень похожи.

3 голосов
/ 11 мая 2011

GCC содержит заголовки tr1 в подкаталоге tr1. Плюс есть пространство имен tr1.

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

Так что, если вы специально не сделали эти вещи или не сделали аналогичное «использование», у вас есть стандартные.

Реализации разделены, но они довольно похожи. Было достаточно различий (initializer_list, сравнения операций), чтобы облегчить ведение одного файла со всеми условными выражениями и макросами.

0 голосов
/ 15 июня 2011

Это очень сильно зависит от конкретной версии компилятора. Например, GCC 4.4 в основном просто имел несколько макропереключателей для вашей опции -std=c++0x для правильной маркировки пространства имен, но всегда заканчивал тем, что извлекал фактический код из tr1_impl/unordered_map, тогда как GCC 4.6 имеет две совершенно разные реализации, одна в 1003 * и один в bits/unordered_map.h - и соответствующие реализации базового класса в .../hashtable.h фактически отличаются; версия C ++ 0x имеет std::forward s везде и т. д.

Краткий ответ: зависит.

...