2011-05-10 28 views
5

Estoy utilizando un unordered_map que se incluye como: #include <unordered_map> y se compila el programa de la siguiente manera: g++ Test.cc -std=gnu++0x -o test estoy usando el unordered_map de TR1 o la de C++ 0x. ¿O es lo mismo?Usando unordered_map de C++ 0x

Respuesta

6

Creo que gcc pone sus encabezados TR1 en <tr1/unordered_map>, por lo que debería obtener la versión C++ 11. Pero son muy similares.

+1

Confirmo para gcc 4.5.2 (puerto mingw, si eso importa). –

3

GCC tiene encabezados tr1 en el subdirectorio tr1. Además, está el espacio de nombres tr1.

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

Así que a menos que usted hizo específicamente estas cosas o hizo un similares "por medio de" tienes las enfermedades de transmisión sexual.

Las implementaciones están divididas, pero son bastante similares. Había suficientes diferencias (initializer_list, comparative ops) para hacer que el mantenimiento de un archivo con todos los condicionales y las macros sea un problema.

0

Esto depende mucho de la versión del compilador en particular. Por ejemplo, GCC 4.4 básicamente solo tenía algunos macrointerruptores para su opción -std=c++0x para hacer el etiquetado del espacio de nombres de manera apropiada, pero siempre terminaba extrayendo el código real de tr1_impl/unordered_map, mientras que GCC 4.6 tenía dos implementaciones completamente separadas, una en tr1/unordered_map.h y otra en bits/unordered_map.h - y las respectivas implementaciones de clase base en .../hashtable.h difieren de hecho; la versión C++ 0x tiene std::forward s en todas partes, etc.

Respuesta corta: Depende.