pointer im std::set
-
Hallo allerseits,
angenommen ich speichere Zeiger in einem "std::set":
std::set<Meine_Klasse*> meine_zeiger;
Jetzt soll nicht nur der Zeiger "unique" sein sondern auch der Rückgabewert einer Methode die über den Zeiger erreicht werden kann:
mein_zeiger->get_id();
Ich habe es mit einem multi_index_container versucht aber nix is'. Natürlich könnte ich den Container vor dem Einfügen des Zeigers von vorne bis hinten durchgehen und überprüfen das sich jedes get_id() unterscheidet aber das sieht mir nicht perfomrant/elegant aus.
Wie würdet ihr es machen?
Gruß
-
http://www.cplusplus.com/reference/stl/set/
template parameter "Compare"!
-
Compare, oder mach einen Wrapper für den Zeiger und implementier da den Vergleichsoperator selbst.
-

Jo, das is' es! Danke, schneller ging's nich'!
-
Noch 'ne Frage hat sich mir gestellt.
Mal angenommen std::set<Meine_Klasse*> sortiert so wie ich es möchte. Also mit einer "Compare"-Klasse Sortier_Meine_Klasse.
Das bedeutet für das o.g. Bsp. das sich jeder Pointer als auch jeder Wert eines mein_im_std::set_gespeicherter_zeiger->get_id() unterscheidet.
Jetzt muss ich mittels einem string nach dem passendem Zeiger suchen. Leider habe ich aber keine map wo der Zeiger und die id gettrennt sind.
Was machen?
Gruß
-
Du schreibst ein bisschen verwirrt

1. das std:set unterscheidet Objekte _NUR_ anhand des Compare-functors. D.h. wenn du 2 Pointer einfuegen willst, die beide die gleiche ID zurueckgeben, wird das nicht funktionieren.
2. Wenn du ein mapping string -> pointer brauchst, dann leg dir doch eines an. std::map ist was du suchst.