QMap und QPair, C ++, Qt

8

Ich möchte eine Datenstruktur für den Zugriff auf Strings auf zwei Arten erstellen:

  1. Zugriff nach ID
  2. Zugriff nach Namen

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

    
deepmax 04.10.2011, 09:38
quelle

3 Antworten

4

Wie wäre es mit:

%Vor%

Sie greifen auf die ID zu und erstellen eine Karte für Namen und IDs. Dann können Sie mit dem Namen mit

darauf zugreifen %Vor%     
Juho 04.10.2011, 09:51
quelle
4

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.

    
HostileFork 04.10.2011 10:04
quelle
4

Sie könnten Boost Bimap verwenden Erstellen Sie eine bidirektionale Karte zwischen der ID und Name.

%Vor%     
yasouser 04.10.2011 12:15
quelle

Tags und Links