std::set: Ändert sich die Baumstruktur automatisch, wenn ich einen Key verändere?



  • Hi!

    Angenommen ich habe ein std::set mit einem Templateparameter (Klassen-Typ), dann überlädt die Klasse den operator< und der Key ist ein Klassenmember.

    Nun wurden dem set schon einige Elemente hinzugefügt.

    Was passiert nun, wenn ich den Key von irgendeinem Element verändere? Dann müsste sich doch automatisch die Baumstruktur anpassen. Ich kann mir das nicht so recht vorstellen, dass dann der ganze Baum neu strukturiert wird.
    Aber wenn das nicht passieren würde, würde der Key doch eventuell nicht mehr gefunden werden?
    Aber es kann doch gar nicht automatisch passieren, weil ich den Key durch eine einfache Zuweisung ändern könnte, von der das set nichts mitbekommt.

    😕



  • Elemente eines Set sind konstant, so dass Du den Key nicht verändern kannst/darfst. Damit erübrigt sich die Frage 🙂


  • Mod

    Eine etwas längere Antwort. Ganz überzeugt bin ich von der LWG-Lösung nicht; aber natürlich ist es möglich, jeden key in einem Wrapper als mutable-member zu halten und dann den Wrapper als set-element zu benutzen.

    Kein Zweifel kann aber darin bestehen, dass die Modifikation eines keys, in einer Weise, die die Ordnung innerhalb des sets verändern würde, zu undefiniertem Verhalten führt.



  • @LordJaxom
    Nö, ich hab doch geschrieben, dass ich ein set mit nur einem Templateparameter meine, und der ist ein Klassentyp.
    Und diese Klasse hat eine Variable, welche der Key ist. Und diese muss nicht konstant sein. Ich kann sie einfach über den Iterator verändern.

    @camper
    Ok danke, ich werde die Variable einfach const deklarieren, ich möchte den Key eh niemals ändern, war nur so ne Überlegung.

    MfG


Anmelden zum Antworten