Daten in zweidimensionaler Struktur

Verschiedenes zu Qt
Antworten
horstfriedrich
Beiträge: 5
Registriert: 20. November 2010 17:36

Daten in zweidimensionaler Struktur

Beitrag von horstfriedrich »

Hallo,

ich komme von java und befasse mich schon eine zeit lang mit c++ und jetzt kommt qt dazu.

Ich habe eine mehr oder weniger große menge (>10.000) an daten, die ich per xml bekomme. Xml lesen funktioniert wunderbar, aber ich habe ein verständnisproblem wie ich die daten weitergebe.

Als beispiel:

Xml auszug

Code: Alles auswählen

<Object id=1>
   <data key="first_name">Max</data>
   <data key="surname">Mustermann</data
   <data key="...">...</data>
   <data key="...">...</data>
   <data key="...">...</data>
</Object>
<Object id=2>
   <data key="first_name">Max</data>
   <data key="surname">Mustermann</data
   <data key="...">...</data>
   <data key="...">...</data>
   <data key="...">...</data>
</Object>
Gespeichert werden in der Hashmap immer "key" und der wert des feldes.

In java habe ich das so gemacht

Code: Alles auswählen

Vector<HashMap<String, String>> data
In qt habe ich mir die doku angesehen und hätte es so gemacht

Code: Alles auswählen

QList<QMap<QString, QString>> data
Jetzt bin ich unsicher wie ich die daten zwischen den methoden hin und her reiche, soll ich das feld data als pointer anlegen und diesen dann herumreichen?

Code: Alles auswählen

QList<QMap<QString, QString>> *data
Oder intern die QMap auch als pointer anlegen?

Code: Alles auswählen

QList<QMap<QString, QString>*> *data
Oder ist QList sowieso schon eine liste mit pointern auf QMaps? Oder soll ich gleich eine QList mit QVariant anlegen?

Kann mir jemand sagen ob ich auf dem richtigen weg bin oder komplett falsch bin und wie ich es besser bzw. ressourcenschonender machen kann/soll?

Ich bin hauptsächlich java gewohnt und deshalb bei so einer struktur noch sehr unsicher.

Danke!
koppi
Beiträge: 29
Registriert: 21. Dezember 2010 14:30
Wohnort: Augsburg
Kontaktdaten:

Re: Daten in zweidimensionaler Struktur

Beitrag von koppi »

horstfriedrich hat geschrieben: Oder intern die QMap auch als pointer anlegen?

Code: Alles auswählen

QList<QMap<QString, QString>*> *data
QMap auch mit Pointer ist denke ich die richtige Wahl.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Der Version ohne Pointer kannst du durchaus eine Chance geben:

Code: Alles auswählen

  QList<QMap<QString, QString> > data;
Mit folgender Begründung:
- Durch das "Implicit Sharing" werden (z.B. beim Einfügen) keine Daten kopiert..
- Der Zugriff auf die Struktur erfolgt mittels (schnellen) Referenzen
- Die Struktur kann ja trotzdem via Referenz an eine andere Methode (soweit überhaupt notwendig) übergeben werden (void machwas(QList<QMap<QString, QString> > &aData))
- Auch der Pointer darauf könnte dauerhaft weitergegeben werden, was jedoch in einer sauberen, objektorientierten (Klassen-)Struktur eher selten vorkommen sollte.
- auf einem aktuellen PC ist 10'000 keine Zahl.. wen kümmert's ob der Aufbau der Struktur 15ms oder 20ms dauert..

hth!
Antworten