2010-02-28 12 views
9

Tengo una pregunta relacionada con la comprensión de cómo funcionan los diccionarios python.La diferencia entre python dict y tr1 :: unordered_map en C++

Recuerdo que leer cadenas en python son inmutables para permitir hash, y es la misma razón por la que no se pueden usar listas como claves, es decir, las listas son mutables (apoyando .append) y por lo tanto no se pueden usar como llaves del diccionario.

Quería saber cómo maneja estos casos la implementación de unordered_map en C++. (dado que las cadenas en C++ son mutables)

+2

Ojalá pudiera editar publicaciones, así podría editar el "'" en "dict's" ... ;-) (Sí, estoy de un humor sarcástico ;-) –

+0

¡Muchas gracias por la edición! :-D –

Respuesta

7

Las claves en todos los contenedores de mapa/conjunto de C++ son const y por lo tanto inmutables (después de agregarlas al contenedor).

Observe que los contenedores C++ no son específicos de las claves de cadena, puede utilizar cualquier objeto, pero la constness impedirá las modificaciones después de que la clave se copie en el contenedor.

+1

¿Qué pasará si alguien usa const_cast para jugar con las llaves? Gracias –

+0

Referencia: http://www.sgi.com/tech/stl/Map.html - 'value_type' se define como" El tipo de objeto, 'par ', almacenado en el mapa " Tenga en cuenta el 'const'. – Dan

+4

@Akshay: si alguien hace eso, obtienen lo que se merecen :) 'std :: map' se implementa con un árbol rojo-negro. Cambiar una clave invalidaría el árbol. 'unordered_map' se implementa utilizando una tabla hash. Cambiar una clave significa que probablemente nunca volverá a encontrar ese elemento, porque probablemente estaría en el cubo de hash incorrecto para su nueva clave. – Dan

Cuestiones relacionadas