Das ist die Frage. Ich hatte vor, Platz zu sparen, indem bei mehreren Werten für einen Schlüssel dieser nur einmal gespeichert wird. Wahrscheinlich wäre es ohne besser.
Und wo soll das bei dir passieren? Das sehe ich nicht wie das gemacht werden soll.
Wenn du viele gleiche Werte mit gleichem Schlüssel hast, könntest du das über eine map von listen machen, bei einer multimap hast du für jeden eingetragenen Wert auch einen Schlüssel.
Du verbrauchst, soweit ich das verstanden habe, wesentlich mehr Speicher als die reine multimap ohne deinen Wrapper, indem du zusätzlich noch eine Liste mit Zeiger auf die Schlüssel speicherst und dann nochmal zusätzlich zu jedem Wert einen iterator in diese Liste.
Wozu hat man denn dann const_cast eingeführt? Es ist immer unschön, Möglichkeiten zu haben, die man nicht nutzen sollte ;)
Manchmal kommt man aber nicht umhin solche Ausnahmen zu nutzen, oder hat nicht die Zeit es geradezuziehen.
Jetzt mal auf dein Beispiel bezogen, müsste man sich entscheiden, macht man die Ausssenschnittstelle key_exists unsauber indem man auf das const verzichtet, oder die interne Implementierung indem man den const_cast einsetzt, mit der Gewissheit, das kein schreibender Zugriff erfolgt. Die entscheidung dürfte klar für den Einsatz des const_casts ausfallen.
Aber wenn man den auch noch umgehen kann, ist doch alles bestens.