Seite 1 von 1

Daten in zweidimensionaler Struktur

Verfasst: 20. November 2010 17:59
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!

Re: Daten in zweidimensionaler Struktur

Verfasst: 21. Dezember 2010 20:28
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.

Verfasst: 21. Dezember 2010 21:13
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!