2010-09-06 12 views
11

Esiste una struttura in Python che supporta operazioni simili a C++ STL map e la complessità delle operazioni corrisponde a C++ STL map?Esiste una struttura in Python simile alla mappa STL di C++?

+1

Hai controllato i dizionari ordinati in Python 3.1? –

+0

Guardandoli. Grazie, dovrebbe essere sufficiente per il mio scopo. L'inserimento/eliminazione dell'hash è O (1), ma suppongo che ciò richiederebbe più memoria dell'albero con O (logN). – Leonid

+0

Alberi e tabelle hash richiedono entrambi memoria O (n). –

risposta

9

dict di solito è abbastanza vicino - cosa vuoi che non faccia?

Se la risposta è "fornire ordine", cosa c'è di sbagliato in for k in sorted(d.keys())? Usa troppa memoria, forse? Se stai facendo molti traversamenti ordinati intervallati da inserti, allora OK, punto preso, vuoi davvero un albero.

dict è in realtà una tabella hash anziché un b-tree. Ma allora map non è definito come b-tree, quindi non ti permette di fare cose come staccare i sottoalberi come un nuovo map, ha solo le stesse complessità di prestazioni. Tutto ciò che è veramente di cui preoccuparsi è che cosa succede a dict quando ci sono un gran numero di collisioni hash, ma deve essere piuttosto raro usare Python in situazioni in cui si richiedono garanzie di prestazioni nel peggiore dei casi.

+0

Sì, dovrebbe essere sufficiente. Grazie! – Leonid

5

Credo che il tipo standard python dict() farà il trucco nella maggior parte dei casi. La differenza dalla std :: map di C++ è che dict è impementato come una mappa hash e la mappa di C++ è ad albero.

0

Controllare il modulo bintrees (pip install bintrees). Questo pacchetto fornisce Binary- RedBlack- e AVL-Trees scritti in Python e Cython/C.

2

Python SortedDict è simile alla mappa STL di C++. Si può leggere su di esso here o .

SortedDict è un contenitore di coppie di valori-chiave in cui un ordine è imposto sui tasti secondo la loro relazione ordinata tra loro. Come con il tipo di dati dict incorporato in Python, SortedDict supporta l'inserimento rapido, l'eliminazione e la ricerca per chiave.

Problemi correlati