0Pricing
C++ Academy · Lektion

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_range verwenden, 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

  1. std::map
  2. std::set
  3. multimap und multiset
  4. Benutzerdefinierte Vergleichsoperatoren
← Zurück zu C++ Academy