#c #c 11 #g #unordered-map
#c #c 11 #g #неупорядоченная карта
Вопрос:
Я использую, unordered_map
который включен как: #include <unordered_map>
и программа скомпилирована следующим образом: g Test.cc -std=gnu 0x -o test
Использую ли я unordered_map
TR1 или C 0x. Или это одно и то же?
Ответ №1:
Я полагаю, что gcc помещает свои заголовки TR1 в <tr1/unordered_map>
, поэтому вы должны получать версию C 11. Но они очень похожи.
Комментарии:
1. Я подтверждаю для 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 имеет две совершенно разные реализации, одну в tr1/unordered_map.h
и одну в bits/unordered_map.h
— и соответствующие реализации базового класса в .../hashtable.h
действительно отличаются; в версии C 0x везде есть std::forward
s и т.д.
Краткий ответ: Это зависит.