Entfernen von map-element durch den Wert
Ich halte diese kurze.
Ich bin versucht zu halten, eine Zuordnung zwischen strings und Objekt-Zeiger, und als solche verwende ich std::map. Ich habe einen manager, der eine Globale Klasse, die merkt sich die Karte, und wenn ein Objekt der Destruktor aufgerufen wird, erzählt der manager, dass es gelöscht wurde.
Die einzige Möglichkeit die ich mir denken kann, ist die Suche über die Landkarte für das Objekt. Gibt es eine effiziente STL Lösung für dieses problem? Macht eine Karte, die ist effizient bei der Suche nach Schlüssel auch vorhanden???
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist nicht eine effiziente Möglichkeit, dies zu tun mit std::map andere als Iteration durch die Werte vergleichen.
Aber die meisten der Zeit, die Schlüssel für ein Wert berechnet sich aus dem Wert selbst. Zum Beispiel mithilfe der Name-Eigenschaft eines Person-Objekts als Schlüssel. Ist es möglich, die manager zum speichern einer Liste von Schlüssel /Wert-Paare im Gegensatz zu dem Wert selbst. Dies würde Ihr problem lösen, ohne neu zu schreiben, einen neuen Algorithmus.
Oder alternativ könnten Sie halten eine umgekehrte Karte auf der manager-Klasse. Im wesentlichen Wert zu drücken. So könnte man es verwenden, um zu berechnen, den Schlüssel zu entfernen später.
Blick auf SGI-Dokumentation der STL,
Damit Sie speichern können, einen iterator in der Karte in Ihrem Objekt, und verwenden Sie diese als eine Konstante Zeit-lookup-Taste, wenn Sie gehen müssen, löschen Sie den Eintrag.
Werfen Sie einen Blick auf Boost Multi-Index-Container Bibliothek.