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.


Anmelden zum Antworten