Rachus: Wann ist ein const_cast angebracht?

Beitrag lesen

Hallo,

Und wo soll das bei dir passieren? Das sehe ich nicht wie das gemacht werden soll.

es sollte so passieren, dass die Schlüssel (vom Typ Key, die meist "größere Objekte", z.B. längere Strings darstellen) nur einmal in der Liste gespeichert werden und in der Hashtabelle nur die Zeiger darauf gespeichert werden müssen.

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.

So werde ich es wohl das nächste Mal auch besser machen…

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.

Das ist abzuwägen. Als "Grundlast" habe ich sizeof(std::list<Key>) + sizeof(std::unordered_multimap<Key*, std::pair<class std::list<Key>::iterator, Value>, Hasher, Equaler>). Bei nicht doppelten Key-Einträgen, kommt pro Eintrag 2*sizeof(void*) dazu. Sobald nun aber ein Schlüssel mehrfach verwendet wird, und dieser Schlüssel größer als 2*sizeof(void*) ist, würde man etwas einsparen. Allerdings ist das wohl tatsächlich nicht so ganz das Wahre.

Aber wenn man den auch noch umgehen kann, ist doch alles bestens.

Auch wenn das bedeutet, dass ich jetzt wieder direkt mit der multimap arbeite.

Grüße,

Rachus