Ich möchte eine Datenstruktur für den Zugriff auf Strings auf zwei Arten erstellen:
Meine erste Idee verwendet zwei Karten für jede Methode, aber es führt zu einer Duplizierung der Daten:
%Vor%Ich suche nach einem besseren Weg, etwa so:
%Vor%aber es kann mir nicht helfen (zumindest weiß ich nicht, wie es geht), weil das Suchen in einer Karte ID und Namen zusammen kennen muss. Wie kann ich eine gute Struktur von Qt-Klassen definieren, um mein Ziel zu erreichen?
Keine externen Bibliotheken, sondern Qt
Qt macht sich wegen der "impliziten Freigabe" nicht so viele Gedanken über die Duplizierung von Daten wie viele andere Klassenbibliotheken:
Die Liste der Klassen, die diese Eigenschaft haben (einschließlich QString
), ist in diesem Link enthalten. Es gibt Helfer, um eigene Klassen zu erstellen, die auch eine Copy-On-Write-Strategie verwenden:
Zusammenfassend: Wenn Sie einen QString mit 10.000 Zeichen haben und ihn einer anderen QString-Variablen zuweisen, müssen Sie nicht für weitere 10.000 Zeichen Speicherplatz zahlen (es sei denn, Sie ändern die Zeichenfolgendaten einer der beiden Instanzen). Dennoch ist sogar ein schreibgeschützter QString-Handle etwas größer als ein int
. Es hängt von Ihrem Szenario ab, ob dieser Größenunterschied im Vergleich zu der Geschwindigkeit, mit der mehrere Suchvorgänge durchgeführt werden, signifikant ist, wie in der Strategie von @Juho.
Sie könnten Boost Bimap verwenden Erstellen Sie eine bidirektionale Karte zwischen der ID und Name.
%Vor%Tags und Links c++ qt data-structures