Gibt es eine Python-Entsprechung für C ++ "multisetint"?

8

Ich portiere C ++ - Code nach Python und eine der Datenstrukturen ist ein Multiset, aber ich bin mir nicht sicher, wie ich das in Python modellieren soll.

Sei ms die C ++ multiset<int>

Wie ms verwendet wird (einige Beispiele bekannt geben)

%Vor%     
MrP 27.06.2013, 15:11
quelle

4 Antworten

1

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.

    
TooTone 27.06.2013, 15:39
quelle
4

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.

    
GrantJ 28.04.2014 18:53
quelle
2

Sie können eine Liste mit den Funktionen bisect bearbeiten. Zum Beispiel wird find zu

%Vor%

Sie finden weitere Entsprechungen in den Dokumenten. Anstatt nach end zu suchen, erhalten Sie jetzt ValueError

    
doctorlove 27.06.2013 15:30
quelle
1

Es gibt ein paar Datenstrukturen, die sich annähern.

  • Python-Sammlungen:

    • Geordnete dict: dict-Unterklasse, die sich die Auftragseinträge merkt, wurde hinzugefügt. Link
    • Counter: dict Unterklasse zum Zählen von hashbaren Objekten. Link
  • von django framework zur Verfügung gestellt:

    • Ein Diktat mit mehreren Schlüsseln mit demselben Wert: link
    • Sorted dict, das als Python-Sammlung veraltet ist, enthält jetzt ein geordneter dict: link
Utkarsh Bhardwaj 10.01.2015 20:50
quelle

Tags und Links