0Pricing
C++ Academy · Leçon

multimap et multiset

Autoriser les clés en double

multimap et multiset est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Autoriser les doublons

std::multimap et std::multiset ressemblent à map et set, mais ils autorisent les clés en double. Tout reste trié.

#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;
}

Insertion dans multiset

Chaque appel à insert() sur un multiset réussit, même pour des valeurs répétées, et le conteneur grandit à chaque fois.

#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;
}

Compter les doublons

count() renvoie désormais le nombre d’occurrences d’une valeur, qui peut être supérieur à 1.

#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;
}

Tout effacer ou en effacer un seul

erase(key) supprime tous les éléments correspondants. Pour n’en supprimer qu’un, effacez un seul itérateur obtenu avec 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;
}

Principes de base de multimap

std::multimap associe des clés à des valeurs, mais permet à une même clé d’être associée à plusieurs valeurs. Remarque : il ne possède pas d’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;
}

Parcourir un multimap

Le parcours fournit toutes les paires dans l’ordre trié des clés, y compris les clés répétées.

#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) renvoie une paire d’itérateurs délimitant tous les éléments associés à cette clé. C’est la méthode standard pour lire toutes les valeurs d’une clé.

#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;
}

Regrouper des données

Un multimap est idéal pour regrouper des données : plusieurs personnes peuvent, par exemple, habiter dans la même ville.

#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 sur multiset

Les recherches dans des intervalles ordonnés fonctionnent toujours. lower_bound trouve le premier élément qui n’est pas inférieur à la valeur cible.

#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;
}

Liste de fréquences triée

Comme les éléments restent triés, un multiset produit naturellement une sortie ordonnée tout en conservant les répétitions.

#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;
}

Total et valeurs distinctes

size() compte chaque élément, y compris les doublons, tandis que pour parcourir les clés distinctes, vous devez vous-même ignorer les répétitions.

#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;
}

Vérification rapide

Vérifiez votre compréhension de la suppression d’éléments dans un multiset.

Récapitulatif

Vous avez appris que multimap et multiset :

  • autorisent les clés en double tout en restant triés
  • utilisent equal_range pour lire toutes les valeurs partageant une même clé
  • font en sorte que erase(key) supprime toutes les correspondances, tandis que la suppression d’un itérateur n’en supprime qu’une

Ensuite, vous contrôlerez l’ordre avec des comparateurs personnalisés.

Questions Fréquemment Posées

La leçon « multimap et multiset » est-elle gratuite ?

Oui — le texte complet de « multimap et multiset » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « multimap et multiset » ?

Autoriser les clés en double Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « multimap et multiset » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. std::map
  2. std::set
  3. multimap et multiset
  4. Comparateurs personnalisés
← Retour à C++ Academy