Mehrere Keys



  • Ich möchte ein Objekt so abspeichern, dass ich über mehrere Keys darauf zugreifen kann. Ein Key ist außerdem nicht eindeutig.

    Meine erste Idee war natürlich sowas wie

    std::multimap<int, shared_ptr<Object> > intMap;
    std::multimap<std::string, shared_ptr<Object> > stringMap;

    Problem hierbei ist dann natürlich die Freigabe. Wenn was aus intMap gelöscht wird, soll es auch aus stringMap gelöscht werden. Da die Keys nicht eindeutig sind, hilft es mir nichts, einfach den Schlüssel irgendwie zu speichern.

    Der zweite Ansatz wäre, die Objekte irgendwie in einer Liste zusammen mit Zeigern auf die Maps, die sie enthalten und iteratoren auf die Position, wo dort zu finden sind zu speichern.
    In den jeweiligen Maps würde ich dann nur einen Iterator auf die Liste speichern.

    Da stoß ich aber dann schon auf nen Menge Probleme. Zuallererst: einen Iterator kann ich garnicht speichern, weil der Iterator ja z.B. in der Liste das Objekt vor und hinter dem besagten Objekt kennt. Wenn ich das davor lösche, müsste der gespeicherte iterator upgedated werden, da er ja sonst ins Nirvana zeigt. Das geht aber nicht, da ich ja nur ne Kopie vom Operator-Objekt habe. Und einen Zeiger auf den Iterator bekomme ich ja auch nicht.

    Weiß jemand Rat bzw. kennt jemand ne gute Bib, wo es solche Container mit mehreren Keys fertig gibt?



  • schreibe ein key klasse die mit int und string arbeit, so spars du dir die zweite multimap. ein bsp was das ganze macht würde vielleicht helfen



  • Das ganze soll sein wie ne Datenbank-Tabelle

    z.B.

    Name         Alter   Wohnort
    Kunibert     31      Bestadt 
    Kunigunde    25      BeStadt
    Siegfried    45      Erhausen
    

    Und ich möchte über die drei Schlüssel Name, Alter oder Wohnort die jeweiligen Objekte kriegen.

    also z.B.

    iterator_kunden bestaedter( kunden.lower_bound("Wohnort", "Bestadt"));

    Und wenn ich einen Kunden hab, dann möcht ich den mit einem Befehl rauslöschen:

    kunden.erase( insolventerKunde);

    Alles von Grundauf neu schreiben würd ich schon hinkriegen. Hab mir aber gedacht, ich könnte was schnell aus mehreren std::multimaps stricken. Oder noch besser was fertiges aus ner Bib verwenden.

    Leider find ich aber auch im Inet nix. Da das ja kein so außergewöhnliches Problem ist, fehlen mir vielleicht auch die richtigen Stichworte. Wie nennt man so ein Konstrukt?


Log in to reply