c++ performance map hashtable complexity-theory

Hashtable en C++?



hash table c++ (9)

Hay un objeto hash_map como muchos han mencionado aquí, pero no es parte del stl. Es una extensión de SGI, así que si estabas buscando algo en el STL, creo que no tienes suerte.

Usualmente uso C ++ stdlib map cada vez que necesito almacenar algunos datos asociados con un tipo específico de valor (un valor clave, por ejemplo, una cadena u otro objeto). La implementación del mapa stdlib se basa en árboles que proporcionan un mejor rendimiento (O (log n)) que la matriz estándar o el vector stdlib.

Mi pregunta es, ¿conoces alguna implementación de tabla hash "estándar" de C ++ que proporcione un rendimiento aún mejor (O (1))? Algo similar a lo que está disponible en la clase Hashtable de la API de Java.



Si tiene las extensiones TR1 disponibles para su compilador, utilícelas. Si no, boost.org tiene una versión bastante similar, excepto para el espacio de nombres std ::. En ese caso, ingrese una declaración de uso para poder cambiar a std :: later.


Ver hash_map de SGI.

Esto también está incluido en la distribución de STLPort .


Visual Studio tiene la clase stdext::hash_map en el encabezado <hash_map> , y gcc tiene la clase __gnu_cxx::hash_map en el mismo encabezado.


hash_map también es compatible con libstdc++ GNU.

Dinkumware también es supports esto, lo que significa que muchas implementaciones tendrán un hash_map (creo que incluso Visual C ++ entrega con Dinkumware).


std :: tr1 :: unordered_map, en <unordered_map>

si no tiene tr1, obtenga impulso y use boost :: unordered_map en <boost/unordered_map.hpp>



Si está usando C ++ 11, tiene acceso a los encabezados <unordered_map> y <unordered_set> . Estos proporcionan las clases std::unordered_map y std::unordered_set .

Si está utilizando C ++ 03 con TR1, tiene acceso a las clases std::tr1::unordered_map y std::tr1::unordered_set , usando los mismos encabezados (a menos que esté usando GCC, en cuyo caso el los encabezados son <tr1/unordered_map> y <tr1/unordered_set> lugar).

En todos los casos, también existen los tipos unordered_multimap y unordered_multiset correspondientes.