Estaba leyendo mi libro de texto Data Structures and Algorithms: By Mark Allen Weiss
y dice que la biblioteca estándar no contiene implementaciones de tabla hash de un conjunto o mapa, sino que los compiladores pueden proporcionar hash_set y hash_map con las mismas funciones miembro del conjunto y la clase de mapa. ¿Por qué no solo incluir implementaciones hash en la biblioteca estándar? El libro fue publicado en 2006, ¿ha habido alguna revisión de C++ desde entonces para agregar estas implementaciones a la biblioteca estándar?¿Por qué la biblioteca estándar para C++ no contiene implementaciones de tabla hash?
Respuesta
Lo que estás buscando se llama std::unordered_set/map
. Estos son parte de C++11, la próxima versión del estándar C++ (que se finalizará en unos pocos meses). También se pusieron a disposición en el Informe técnico 1 en 2005, que era una lista de adiciones a la biblioteca estándar de C++ entre el primer estándar y el siguiente. En TR1, estaban en el espacio de nombres std::tr1
.
Boost en realidad naves una implementation of TR1 (aunque no se debe utilizar la versión std::tr1::shared_ptr
, como el regular de boost::shared_ptr
y std::shared_ptr
en C++ 11 son mucho, mucho mejor).
Si no recuerdo mal, la razón por la cual las tablas hash no se presentaron inicialmente en C++ 98 fue simplemente la falta de tiempo para el comité de estándares de C++. Básicamente tenían una fecha límite para enviar la cosa, y las tablas hash no lo hacían.
Estos también estaban disponibles como extensiones de biblioteca TR1 desde 2005. – Blastfurnace
Bueno, eso es desafortunado. ¡Pero gracias! Desde wikipedia: "Incluir tablas hash (contenedores asociativos no ordenados) en la biblioteca estándar de C++ es una de las solicitudes más recurrentes." – tehman
@Blastfurnace: Noted. Gracias. –
- 1. ¿Hay implementaciones de Queue estándar para C?
- 2. ¿Por qué CPython no usa `sphinx.autodoc` para la biblioteca estándar?
- 3. Biblioteca estándar Intel (C++)
- 4. Biblioteca estándar madura para C
- 5. trim no es parte de la biblioteca c/C++ estándar?
- 6. ¿El STL contiene una tabla hash?
- 7. ¿Extender la biblioteca estándar de C++ por herencia?
- 8. Etiquetas de biblioteca estándar
- 9. Diferencia entre la biblioteca C estándar y la biblioteca C POSIX
- 10. versiones de la biblioteca estándar de C++
- 11. Vinculación de la biblioteca C con nombre no estándar
- 12. Incluir biblioteca estándar de C++
- 13. ¿Por qué es + = temporales válidos en la biblioteca estándar?
- 14. ¿Por qué la biblioteca estándar tiene find y find_if?
- 15. Cómo reemplazar la función de biblioteca estándar C?
- 16. Trabajo interno de la biblioteca estándar C
- 17. ¿Tiene una buena función hash para una tabla hash C++?
- 18. Localización de C biblioteca estándar
- 19. Biblioteca hash STM para C (glib?)
- 20. ¿No hay especializaciones de std :: hash para contenedores estándar?
- 21. tabla hash optimizado para la plena iteración + sustitución de claves
- 22. Algoritmo de hash para la implementación de la tabla hash
- 23. ¿Referencia completa en línea para la biblioteca estándar C?
- 24. ¿Qué significa "programa para interfaces, no implementaciones"?
- 25. ¿Qué es la biblioteca SOAP estándar para usar en groovy?
- 26. Por qué no hay una función estándar memswap
- 27. Comprensión de las implementaciones de función de biblioteca C integradas
- 28. ¿Hay un repositorio de biblioteca para C?
- 29. ¿Objective-C tiene una biblioteca estándar?
- 30. problemas para volver tabla hash
Sé que Mark es un gran tipo: D, lo más probable es que no estén incluidos en la biblioteca porque solo se usarían internamente. También es más fácil para el compilador optimizarlos. –
¿qué quieres decir con que solo se use internamente? y eso es bastante increíble, ¿de dónde lo conoces? – tehman
Es uno de los jefes de la escuela a la que asisto. Y con el uso interno quiero decir que probablemente estén optimizados para el código específico de la biblioteca. Y Nicolas puede tener un punto. –