Использование неупорядоченной карты C 0x

#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 и т.д.

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