2010-09-06 11 views
11

¿Hay una estructura en Python que admite operaciones similares a C++ STL map y la complejidad de las operaciones corresponde a C++ STL map?¿Hay una estructura en Python similar al mapa C++ STL?

+1

¿Has echado un vistazo a los diccionarios ordenados en Python 3.1? –

+0

Echando un vistazo a ellos. Gracias, eso debería ser suficiente para mi propósito. La inserción/eliminación de hash es O (1), pero supongo que requeriría más memoria que tree con O (logN). – Leonid

+0

Los árboles y las tablas hash requieren memoria O (n). –

Respuesta

9

dict suele estar lo suficientemente cerca, ¿qué quiere que no funcione?

Si la respuesta es "proporcionar orden", ¿qué pasa realmente con for k in sorted(d.keys())? Usa demasiada memoria, tal vez? Si está haciendo muchos cruces ordenados intercalados con inserciones, entonces OK, señalado, realmente quiere un árbol.

dict es en realidad una tabla hash en lugar de un b-tree. Pero entonces map no es definido para ser un árbol b, por lo que no le permite hacer cosas como separar subárboles como un nuevo map, simplemente tiene las mismas complejidades de rendimiento. Todo lo que realmente tiene que preocuparse es qué pasa con dict cuando hay un gran número de colisiones hash, pero debe ser bastante raro usar Python en situaciones en las que se desean garantías de rendimiento de peor caso.

+0

Sí, dict debería ser suficiente. ¡Gracias! – Leonid

5

Creo que el tipo estándar de pitón dict() hará el truco en la mayoría de los casos. La diferencia con el std :: map de C++ es que el dict se impone como un mapa hash y el mapa de C++ se basa en un árbol.

0

Mire el módulo bintrees (biprees de instalación de pip). Este paquete proporciona Binary-RedBlack- y AVL-Trees escritos en Python y Cython/C.

2

Python SortedDict es similar al mapa C++ STL. Puede leer al respecto here o .

SortedDict es un contenedor de pares de valores clave en la que una orden se impuesta a las teclas de función de su relación ordenada entre sí. Al igual que con el tipo de datos dict incorporado en Python, SortedDict admite la inserción, el borrado y la búsqueda rápidos mediante .

Cuestiones relacionadas