Ich fand heraus, dass sie einen Schlüssel und mehrere Werte haben, was einzigartig ist.
85
Die Multimap speichert Paare von (Schlüssel, Wert), wobei sowohl Schlüssel als auch Wert mehrmals vorkommen können.
Der map<key, set<value>>
Wert wird nur einmal für einen bestimmten Schlüssel gespeichert. Dazu muss es in der Lage sein, die Werte zu vergleichen, nicht nur die Schlüssel.
Es hängt von Ihrer Anwendung ab, ob die vergleichbaren Werte gleichwertig sind oder ob Sie sie trotzdem separat speichern möchten. Vielleicht enthalten sie Felder, die unterschiedlich sind, aber nicht am Vergleich für die Menge teilnehmen.
std::multimap<key, value>
lässt zu , dass derselbe Schlüssel mehrmals angezeigt wirdstd::map<key, whatever>
, während die Eindeutigkeit von erforderlich istkey
.A
std::map
ist ein assoziativer Container, mit dem Sie Ihrem Typwert einen eindeutigen Schlüssel zuordnen können. Beispielsweise,A
std::multimap
ist gleich astd::map
, aber Ihre Schlüssel sind nicht mehr eindeutig. Daher können Sie eine Reihe von Artikeln finden, anstatt nur einen einzigen Artikel zu finden. Beispielsweise,Das
std::set
ist wie einstd::map
, speichert jedoch keinen Schlüssel, der einem Wert zugeordnet ist. Es speichert nur den Schlüsseltyp und stellt sicher, dass er innerhalb des Satzes eindeutig ist.Sie haben auch die
std::multiset
, die dem gleichen Muster folgt.Alle diese Container bieten einen O-Zugriff (log (n)) mit ihrem find / equal_range.
quelle
std::pair<auto first, auto second> range = myMap.equal_range("test");
nicht, weilerror: 'auto' not allowed in template argument
. Verwenden Sieconst auto range = myMap.equal_range("test")
stattdessen.Da
map
Container keine doppelten Schlüsselwerte zulassen, prüft die Einfügeoperation für jedes eingefügte Element, ob bereits ein anderes Element mit demselben Schlüsselwert im Container vorhanden ist. In diesem Fall wird das Element nicht eingefügt und sein zugeordneter Wert wird in keiner Weise geändert.andererseits
kann beliebig viele Elemente mit demselben Schlüssel einfügen.
http://www.cplusplus.com/reference/stl/map/
http://www.cplusplus.com/reference/stl/multimap/
quelle
Letzteres erfordert, dass die Werte geordnet werden können (entweder über
operator<
oder eine Vergleichsfunktion), Ersteres nicht.quelle
T
, der keine Bestellung enthält. Sie können es verwenden, um ein zu erstellenstd::multimap<U, T>
, aber Sie können es nicht verwenden, um ein zu erstellenstd::map<U, std::set<T> >
.