Supprimer des paires
Fait partie de la section Logique et Flux du Journey C++ de Coddy. Leçon 27 sur 56.
Parfois, vous devez supprimer des paires clé-valeur de votre map lorsqu’elles ne sont plus nécessaires. La méthode .erase() offre un moyen simple de supprimer des éléments en spécifiant la clé que vous souhaitez retirer.
Pour supprimer un élément d'une map, il suffit d'appeler .erase() avec la clé comme argument :
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;
scores.erase("Bob"); // Supprime complètement l'entrée de BobAprès avoir appelé erase("Bob"), la map contiendra uniquement les scores d’Alice et de Carol. Si vous essayez d’effacer une clé qui n’existe pas dans la map, l’opération ne fait tout simplement rien — aucune erreur ne se produit.
Lors de l’itération sur un map avec une boucle for basée sur une plage, chaque élément est un std::pair contenant la clé et la valeur. Vous pouvez accéder à la clé avec .first et à la valeur avec .second :
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Cela affichera chaque nom et chaque score dans l’ordre alphabétique, puisque std::map trie automatiquement ses clés.
Cette méthode est particulièrement utile pour maintenir des structures de données propres, supprimer des informations obsolètes ou implémenter des fonctionnalités permettant aux utilisateurs de supprimer des entrées de votre application.
Défi
FacileCréez un programme qui gère un répertoire de contacts à l’aide d’une std::map. Votre programme stockera les noms et les numéros de téléphone des contacts, puis permettra aux utilisateurs de supprimer des contacts spécifiques du répertoire à l’aide de la méthode .erase().
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre de contacts initiaux - Puis
npaires d’entrées :- Une chaîne représentant le nom du contact
- Une chaîne représentant le numéro de téléphone
- Un entier
mreprésentant le nombre de contacts à supprimer - Puis
mchaînes représentant les noms des contacts à supprimer
Votre programme doit :
- Créer une
std::map<std::string, std::string>nomméecontacts - Lire le nombre de contacts initiaux et remplir la map avec les noms et les numéros de téléphone des contacts
- Afficher le répertoire de contacts initial dans le format indiqué ci-dessous
- Lire le nombre de contacts à supprimer
- Pour chaque nom de contact à supprimer, utiliser la méthode
.erase()pour le supprimer de la map - Afficher le répertoire de contacts mis à jour après toutes les suppressions
Utilisez le format de sortie exact suivant :
Répertoire initial :
Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...Répertoire mis à jour après les suppressions :
Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...Si le répertoire devient vide après toutes les suppressions, affichez :
Updated Contact Directory:
Directory is emptyLes contacts doivent être affichés dans l’ordre dans lequel ils apparaissent lors de l’itération sur la map (par ordre alphabétique des noms de contacts). Utilisez une boucle for basée sur une plage pour parcourir la map les deux fois, en accédant à chaque paire clé-valeur avec pair.first pour le nom du contact et pair.second pour le numéro de téléphone. N’oubliez pas que tenter de supprimer un contact qui n’existe pas ne provoquera pas d’erreur : la map restera simplement inchangée.
Essayez vous-même
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Read number of initial contacts
int n;
cin >> n;
// Créer la map des contacts
map<string, string> contacts;
// Read initial contacts
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// TODO: Ajouter le contact à la map
}
// Afficher l'annuaire initial
cout << "Initial Contact Directory:" << endl;
// TODO: Afficher tous les contacts en utilisant une boucle for range-based
// Lire le nombre de contacts à supprimer
int m;
cin >> m;
// Supprimer les contacts
for (int i = 0; i < m; i++) {
string nameToRemove;
cin >> nameToRemove;
// TODO: Supprimer le contact en utilisant la méthode .erase()
}
// Afficher l'annuaire mis à jour
cout << "Updated Contact Directory:" << endl;
// TODO: Print remaining contacts or "Directory is empty" if empty
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs4Maps (Paires Clé-Valeur)
Introduction à std::mapCréer une MapAccéder aux valeurs et les modifierVérifier l'existence de clésSupprimer des pairesParcourir une MapRécapitulatif - Fréquence des mots2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâcheEntraînez-vous par vous-même : Compilateur C++ en ligne