2011-07-30 10 views
8

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?

+0

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. –

+0

¿qué quieres decir con que solo se use internamente? y eso es bastante increíble, ¿de dónde lo conoces? – tehman

+0

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. –

Respuesta

15

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.

+1

Estos también estaban disponibles como extensiones de biblioteca TR1 desde 2005. – Blastfurnace

+0

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

+0

@Blastfurnace: Noted. Gracias. –

Cuestiones relacionadas