Mit doppelten Schlüssel mit einem multimap

EIN Karte stellt ein Verfahren zur mit Listen von Daten in einer solchen Art und Weise, dass Sie jedes Element zugreifen können leicht mit einem Schlüssel schnell zu arbeiten. Verwendung einer Karte praktisch, weil Sie die Einzelteile in einer zufälligen Reihenfolge zugreifen können. Allerdings muss jeder Schlüssel eindeutig sein. Es ist nicht so, wenn Ihre Anwendung wird scheitern, wenn Sie einen Wert auf einen doppelten Schlüssel zuweisen - das Duplikat einfach den ursprünglichen Wert überschreiben. Hier ein Beispiel:

#einschließen #einschließen using namespace std-int main () {Karte Ehen Ehen [ "Tom"] = "Suzy" -marriages [ "Harry"] = "Harriet" -marriages [ "Tom"] = "Amy" -cout lt; lt; Ehen [ "Tom"] lt; lt; Endl-cout lt; lt; Ehen [ "Harry"] lt; lt; Endl-return 0-}

Beachten Sie, dass es tatsächlich zwei Männer sind benannt Tom, aber sie haben Frauen mit unterschiedlichen Namen. Wenn Sie dieses Beispiel ausführen, erhalten Sie nicht die erwartete Ausgabe:

AmyHarriet

Der ursprüngliche Wert wird, weil ein verloren Karte kann nur einen Schlüssel mit dem Namen Tom. Sie können ein verwenden Multimap Um dieses Problem zu überwinden. EIN Multimap hat die gleiche grundlegende Prämisse Sie auf eine Taste legen basierend Werte zu lassen, aber die daraus resultierende variable doppelte Einträge haben kann. Hier ist ein Beispiel für ein Multimap dass Adressen unserer Ausgabe:

#einschließen #einschließen using namespace std-int main () {multimap Ehen-marriages.insert (Paar ( "Tom", "Suzy")) - marriages.insert (Paar ( "Harry", "Harriet")) - marriages.insert (Paar ( "Tom", "Amy")) - für (multimap :: iterator Werte = marriages.begin () - Werte = marriages.end () - ++ Values) {cout lt; lt; (*) Werte .First lt; lt; " ist verheiratet mit " lt; lt; (*) Werte .second lt; lt; endl-} cout lt; lt; endl lt; lt; "Frauen Verheiratet mit Männer namens Tom" lt; lt; Endl-multimap :: const_iterator Werte = marriages.find ( "Tom") - int Number = marriages.count ( "Tom") - für (int i = 0-i lt; Nummer- i ++) {cout lt; lt; Werte-> second lt; lt; Endl - ++ Werte-} return 0-}

In diesem Fall legen Sie noch ein Objekt, das zwei Schnur Objekte, von denen die erste ist der Schlüssel. Ein einfügen() Funktion können Sie neue Einträge hinzufügen Ehen. Die Technik unterscheidet sich von der Verwendung eines Standard Karte, aber das Ergebnis ist dasselbe. Jeder Eintrag besteht aus zwei Schnur Werte.

Um die Einträge anzuzeigen, müssen Sie mit Iteratoren arbeiten. Das Beispiel zeigt zwei Ansätze, die Sie verwenden können. Die ersten Listen alle Einträge in Ehen. Es beginnt mit einem Iterator erstellen, die zu Beginn der Ehen Punkte mit der marriages.begin () Funktion. Die Schleife wird fortgesetzt, während Werte nicht gleich marriages.end (). Beachten Sie die Präfixnotation verwendet zu aktualisieren Werte auf den nächsten Eintrag in der Liste. Es ist auch wichtig zu beachten, dass Werte die Daten liefert einen Zeiger auf, so dass Sie entweder verwenden müssen (*) Werte .First die erste Zeichenfolge in dem Eintrag zuzugreifen oder Werte-> zuerst.

EIN Multimap eigentlich recht flexibel ist. Sie können die Anzahl von doppelten Tasteneingaben zählen die Verwendung von Graf() Funktion. Um diese Funktion zu nutzen, müssen Sie den Schlüssel Wert, den Sie suchen möchten bieten. Das finden() Funktion macht es möglich, einen Iterator zu erstellen, die nur die Einträge für einen bestimmten Schlüssel enthält. Das Beispiel zeigt eine Technik für die Werte dem durchlaufen, die Sie finden. Die Ausgabe von diesem Beispiel sieht wie folgt aus:

Harry ist HarrietTom verheiratet ist verheiratet mit SuzyTom zu AmyWomen verheiratet verheiratet ist zu Men Named TomSuzyAmy

Menü