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 aún no tiene unordered_map o unordered_set, son parte de boost .
Aquí está la documentación para ambos .
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.
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.
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.