multimap und multiset
Doppelte Schlüssel zulassen
multimap und multiset ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Duplikate zulassen
std::multimap und std::multiset ähneln map und set, erlauben aber doppelte Schlüssel. Alles bleibt sortiert.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 3, 3};
for (int x : ms) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Einfügen in multiset
Jedes insert() in ein Multiset ist erfolgreich, auch bei wiederholten Werten, sodass der Container jedes Mal wächst.
#include <iostream>
#include <set>
int main() {
std::multiset<std::string> ms;
ms.insert("a");
ms.insert("a");
ms.insert("a");
std::cout << ms.size() << " elements\n";
return 0;
}Duplikate zählen
count() gibt jetzt zurück, wie oft ein Wert vorkommt. Das kann mehr als 1 sein.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{5, 5, 5, 7, 9, 9};
std::cout << "5 appears " << ms.count(5) << " times\n";
std::cout << "9 appears " << ms.count(9) << " times\n";
return 0;
}Alle oder ein Element löschen
erase(key) entfernt jedes passende Element. Um nur eines zu entfernen, löschen Sie einen einzelnen Iterator aus find().
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 2, 3};
ms.erase(ms.find(2));
std::cout << "count of 2: " << ms.count(2) << '\n';
return 0;
}Grundlagen von multimap
std::multimap ordnet Schlüssel Werten zu, erlaubt aber, dass ein Schlüssel mehreren Werten zugeordnet wird. Hinweis: Es gibt keinen operator[].
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm;
mm.insert({"fruit", 1});
mm.insert({"fruit", 2});
mm.insert({"veg", 3});
std::cout << mm.size() << " pairs\n";
return 0;
}Eine multimap durchlaufen
Beim Durchlaufen werden alle Paare in sortierter Reihenfolge der Schlüssel geliefert, einschließlich wiederholter Schlüssel.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"a", 1}, {"a", 2}, {"b", 3}};
for (const auto& [k, v] : mm) {
std::cout << k << " => " << v << '\n';
}
return 0;
}equal_range
equal_range(key) gibt ein Iteratorpaar zurück, das alle Elemente mit diesem Schlüssel einschließt. Das ist die übliche Methode, alle Werte eines Schlüssels auszulesen.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"x", 10}, {"x", 20}, {"y", 30}};
auto range = mm.equal_range("x");
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->second << ' ';
}
std::cout << '\n';
return 0;
}Daten gruppieren
Eine Multimap eignet sich ideal zum Gruppieren: Beispielsweise können viele Personen dieselbe Stadt haben.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, std::string> byCity{
{"NYC", "Alice"}, {"NYC", "Bob"}, {"LA", "Carol"}
};
auto r = byCity.equal_range("NYC");
for (auto it = r.first; it != r.second; ++it)
std::cout << it->second << '\n';
return 0;
}lower_bound bei multiset
Geordnete Bereichsabfragen funktionieren weiterhin. lower_bound findet das erste Element, das nicht kleiner als das Ziel ist.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 4};
auto it = ms.lower_bound(2);
std::cout << "first >= 2 is " << *it << '\n';
return 0;
}Sortierte Häufigkeitsliste
Da die Elemente sortiert bleiben, erzeugt ein Multiset auf natürliche Weise eine geordnete Ausgabe, in der Wiederholungen erhalten bleiben.
#include <iostream>
#include <set>
int main() {
std::multiset<int> scores{90, 75, 90, 60, 75, 90};
for (int s : scores) std::cout << s << ' ';
std::cout << '\n';
return 0;
}Gesamtzahl und eindeutige Elemente
size() zählt jedes Element einschließlich Duplikaten. Wenn Sie beim Durchlaufen nur eindeutige Schlüssel benötigen, müssen Sie Wiederholungen selbst überspringen.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 1, 2, 3, 3};
std::cout << "total: " << ms.size() << '\n';
std::cout << "count of 1: " << ms.count(1) << '\n';
return 0;
}Kurze Überprüfung
Testen Sie Ihr Verständnis des Löschens aus einem Multiset.
Zusammenfassung
Sie haben gelernt, dass multimap und multiset:
- doppelte Schlüssel erlauben und dabei sortiert bleiben
equal_rangeverwenden, um alle Werte mit demselben Schlüssel auszulesen- mit
erase(key)alle passenden Elemente entfernen, während das Löschen eines Iterators nur ein Element entfernt
Als Nächstes steuern Sie die Reihenfolge mit benutzerdefinierten Vergleichsobjekten.
Häufig gestellte Fragen
Ist die Lektion „multimap und multiset“ kostenlos?
Ja — der vollständige Text von „multimap und multiset“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „multimap und multiset“?
Doppelte Schlüssel zulassen Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „multimap und multiset“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- std::map
- std::set
- multimap und multiset
- Benutzerdefinierte Vergleichsoperatoren