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, appelez simplement .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 ne contiendra que les scores d'Alice et de Carol. Si vous essayez de supprimer une clé qui n'existe pas dans la map, l'opération ne fait tout simplement rien - aucune erreur ne se produit.
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'un std::map. Votre programme stockera des noms de contacts et des numéros de téléphone, puis permettra aux utilisateurs de supprimer des contacts spécifiques du répertoire en utilisant la méthode .erase().
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre de contacts initiaux - Ensuite
npaires d'entrées :- Une chaîne de caractères représentant le nom du contact
- Une chaîne de caractères représentant le numéro de téléphone
- Un entier
mreprésentant le nombre de contacts à supprimer - Ensuite
mchaînes de caractères représentant les noms des contacts à supprimer
Votre programme doit :
- Créer un
std::map<std::string, std::string>nommécontacts - Lire le nombre de contacts initiaux et remplir la map avec les noms de contacts et les numéros de téléphone
- 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 retirer 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 à travers la map (ordre alphabétique par nom de contact). Utilisez une boucle for basée sur une plage (range-based for loop) pour itérer à travers 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.
Aide-mémoire
Pour supprimer des éléments d'une map, utilisez la méthode .erase() avec la clé :
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores.erase("Bob"); // Supprime complètement l'entrée de BobSi la clé n'existe pas, .erase() ne fait rien et aucune erreur ne se produit.
Essayez vous-même
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Lire le nombre de contacts initiaux
int n;
cin >> n;
// Créer la map des contacts
map<string, string> contacts;
// Lire les contacts initiaux
for (int i = 0; i < n; i++) {
string name, phone;
cin >> name >> phone;
// TODO: Ajouter le contact à la map
}
// Afficher le répertoire initial
cout << "Initial Contact Directory:" << endl;
// TODO: Afficher tous les contacts en utilisant une boucle for basée sur la plage
// 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 le répertoire mis à jour
cout << "Updated Contact Directory:" << endl;
// TODO: Afficher les contacts restants ou "Directory is empty" s'il est vide
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âche