000
27.10.2020, 14:38 Uhr
Merkaber
|
Hallo liebe Community,
ich moechte die Daten von einem XML file in zusammenhaengendes Datenobjekte speichern um somit einen schnelleren Zugriff in O(1) zu ermoeglichen. Hier bin ich leider ueber das Problem gestossen, wie ich das am besten realisiere.
Zuerst parse ich also das file mit z.B. pugixml und habe den gesamten Tree im speicher.
Nun die Frage, wie ich am besten die Klasse definiere. Grundsaetzlich soll jedes Objekt, nach Abschluss, in einem std::unordered_set drin sein.
C++: |
class A { public: A();
std::string foo; long bar; }
|
oder
C++: |
class B { public: B(const std::string foo, const long& bar) : std::move(foo(foo)) {};
std::string& foo; long& bar; }
|
Der Tree soll aus dem Speicher danach verschwinden, somit sollte class B im zweiten Beispiel nicht funktionieren, da ich ja die Referenzen uebergebe, sodass die ungueltig sind, nachdem der Tree geloescht wurde.
Ich moechte moeglichst effizient sein, da die Daten eines Objektes sehr sehr haeufig abgefragt werden und wuerde ich nur den Tree benutzen, muesste es bei jeder Abfrage den gesamten Tree durchlaufen und nach dem jeweiligen Datensatz suchen und dann die Daten nehmen.
Zusaetzlich die Frage: Was passiert in diesem Fall
C++: |
class A { public: A(); std::string foo; long bar; }
main() { A a(); std::string s = a.foo;
a.foo = s; }
|
Werden hier jeweils nur die Adressen ausgetauscht oder jedes mal kopiert. Ist das effizient?
Vielen Dank! |