S
akari schrieb:
...
Wenn unveränderlichkeit eine Voraussetzung für dich ist, sehe ich aber nicht dein Problem mit map. Beim Eintrag wird Index und Objekt in die Map eingetragen, fertig....
Mein Problem liegt darin, dass der Wert im map-Index und der Schlüsselwert in der Klasse korrespondieren müssen. Als einzige Lösung bliebe da eine komplette Kapselung von map ... was mir aber recht aufwendig und hochgradig oversized (für so eine "normale Forderung") erscheint.
akari schrieb:
...
Was bei dener Wunschkonstruktuktion immer noch nicht berücksichtigt ist, das der Index-Wert des Objekt selber sich nach dem Einfügen noch ändern könnte, bzw. das dies nicht mehr möglich ist....
Naja, set sorgt dafür ja, so gut es kann (gibt nur const-iteratoren zurück) ....
... aber je länger ich darüber nachdenke, umso klarer wird mir, dass etwas anderes nicht stimmt: Das Design meiner Fachklasse !
(Wir haben hier in der Firma einen erstklassigen (und auch noch sehr freundlichen und bescheidenen) externen Berater, der in solchen Situationen immer sagt: "Solche Probleme weisen oft darauf hin, dass die Fachlichkeit nicht sauber geschnitten wurde.")
Folgende Überlegung:
- Wenn ein Element ein Schlüssel ist, DARF er nicht verändert werden => Fachklasse bekommt keinen Setter.
- Ein "Ändern des Schlüssels" bedeutet eigentlich: Anlegen einer Kopie unter einem anderen Schlüssel.
=> Damit ist auf jeden Fall schonmal das "Veränderungsproblem" gelöst und ich könnte ein std::set verwenden (wenn da nicht die unschöne find()-Definition wäre)
=> Allerdings müsste ich mir noch Gedanken über eine "flache Kopie" machen.
- Der Begriff "Schlüssel" macht bezogen auf das einzelne Objekt gar keinen Sinn (wieso sollte man ein einziges "Durchnummerieren" ?), sondern ist eigentlich dem Container näher als dem Objekt (in meinem speziellen Fall auf jeden Fall)
=> Schlüssel ganz aus dem Objekt raus und in den Index der Map.
=> Einfacher Indexzugriff (kein "häßliches find()" mehr)
Zum "Externalisieren" der Daten (von meinem internen Objekt in einen MIDI-Datenstrom) muß dann eben der Index mitgeliefert werden.
Gruß,
Simon2.