Sekundärer Zugriff über std::map<Obj*, std::vector<Obj*>>?
-
Hi,
ich las häufig, dass davon abgeraten wird in assoziativen Containern Zeiger als Schlüssel zu verwenden. Doch wieso?
Wenn ich eine sehr große Datenstruktur habe, deren Iteration lange dauert und nach gewissen Kriterien jetzt ein Mapping von Obj zu einer Liste anderer Obj haben möchte, dann ist für mich zunächst:
std::map<Obj*, std::vector<Obj*>>intuitiv. Wichtig: Es geht hier nicht um das Speichern dieser Daten, daher schreibe ich im Topic auch "Sekundärer Zugriff", das sind lediglich Verweise auf bereits bestehende Daten.
Klar ist, dass die Zeiger valide bleiben müssen. Doch wenn sie das tun:
Thread-Frage: Was spricht dagegen diesen Container zu nutzen?
Klar, ich könnte Obj nach irgendeinem (hier willkürlichen) Schlüssel identifizieren, irgendein string z.B., und dann eine unordered_map nutzen. Dann wäre in map der Key kein Zeiger mehr. Trotzdem sehe ich darin keinen Vorteil an dieser Stelle. Es ist sicher gestellt, dass alle Zeiger valide bleiben, während ich besagte map hier nutze.
Also: Thread-Frage
Danke und viele Grüße
-
Eisflamme schrieb:
Thread-Frage: Was spricht dagegen diesen Container zu nutzen?
Nichts
-
Ist Adressengleichheit hier auch wirklich die Art von Gleichheit, die du wünscht?
-
TyRoxX:
Cool, danke.SeppJ:
Die Adresse bestimmt hier die Identität, Merkmale des Objektes nicht unbedingt, daher würde ich sagen, ja.
-
Meistens ist es in solchen Faellen aber die bessere Methode, die Daten direkt in die Objekte zu speichern. Ich glaube, alle Male, die ich sowas gemacht habe, ging es darum, dass ich 3rd-party-libraries brauchte und deswegen nicht erweitern konnte.