2011-02-09 20 views

Respuesta

12

En MacOSX la cabecera correcta es en <ext/hash_map> no <hash_map>. Aquí funcionó bien:

#if defined __GNUC__ || defined __APPLE__ 
#include <ext/hash_map> 
#else 
#include <hash_map> 
#endif 

int main() 
{ 
     using namespace __gnu_cxx; 

     hash_map<int, int> map; 
} 

Por cierto, yo prefiero usar <tr1/unordered_map>.

+0

yo todavía tengo "‘hash_map’no fue declarado en este ámbito", después siguió a su guía. –

+0

¿Usted usa 'usando __gnu_cxx espacio de nombres;' 'o __gnu_cxx :: hash_map '? –

+0

gracias. resuelto –

5

La cabecera <hash_map> no es parte del estándar de C++ y es una implementación específica del compilador. No hay garantía de que pueda encontrarlo en ningún sistema en particular, o de que las diversas implementaciones que surjan en cada sistema sean mutuamente compatibles entre sí.

Si desea utilizar un mapa hash en C++, es posible que desee ver en boost::unordered_map, tr1::unordered_map, o la implementación de un prototipo C++ 0x del compilador de std::unordered_map. Estas implementaciones están bastante estandarizadas, ya sea por ISO o por la comunidad Boost, y pueden instalarse fácilmente en la mayoría de los compiladores de C++. Sé que es un poco presuntuoso por mi parte decir simplemente "ir a reescribir el código utilizando una biblioteca diferente", pero teniendo en cuenta que C++ está a punto de ganar contenedores de hash de esta forma es probable que sea una inversión rentable.

Cuestiones relacionadas