Es gibt kein. Siehe Pythons Standardbibliothek - gibt es ein Modul für balanced balanced tree? für eine allgemeine Diskussion der Entsprechungen von C ++ - Baumcontainern ( map
, set
, multimap
, multiset
) in Python.
Am nächsten kommt mir die Verwendung von Dictionary-Mapping-Integern, um zu zählen (auch ganze Zahlen). Dies bringt Sie jedoch nicht in die richtige Reihenfolge, so dass Sie nicht mit lower_bound
suchen können. Eine Alternative ist die Verwendung einer geordneten Liste, wie sie von anderen bereits vorgeschlagen wurde, vielleicht eine Liste von (Ganzzahl-, Zähl-) Tupeln? Wenn Sie nur suchen müssen, nachdem Sie alle Ihre Einfügungen vorgenommen haben, können Sie das Wörterbuch als temporäre Struktur für die Konstruktion verwenden. Erstellen Sie die Liste, nachdem Sie alle Einfügungen vorgenommen haben, und verwenden Sie dann die Liste zum Suchen.
Es gibt einige Implementierungen von sortierten Datentypen, die zu Ihren Kriterien passen würden. Zwei beliebte Optionen sind SortedContainers und blist Module. Jedes dieser Module stellt einen SortedList -Datentyp bereit, der die Elemente automatisch in sortierter Reihenfolge verwaltet und dies schnell ermöglicht Insertion und untere / obere Grenze Suchvorgänge. Es gibt einen Leistungsvergleich , der ebenfalls hilfreich ist.
Der entsprechende Code, der den SortedList-Typ aus dem SortedContainers-Modul verwendet, wäre:
%Vor%Alle diese Operationen sollten effizient für einen sortierten Listendatentyp funktionieren.
Sie können eine Liste mit den Funktionen bisect bearbeiten. Zum Beispiel wird find
zu
Sie finden weitere Entsprechungen in den Dokumenten. Anstatt nach end
zu suchen, erhalten Sie jetzt ValueError
Es gibt ein paar Datenstrukturen, die sich annähern.
Python-Sammlungen:
von django framework zur Verfügung gestellt: