Menu
Coddy logo textTech

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 Bob

Aprè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.

challenge icon

Défi

Facile

Cré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 n représentant le nombre de contacts initiaux
  • Ensuite n paires 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 m représentant le nombre de contacts à supprimer
  • Ensuite m chaînes de caractères représentant les noms des contacts à supprimer

Votre programme doit :

  1. Créer un std::map<std::string, std::string> nommé contacts
  2. Lire le nombre de contacts initiaux et remplir la map avec les noms de contacts et les numéros de téléphone
  3. Afficher le répertoire de contacts initial dans le format indiqué ci-dessous
  4. Lire le nombre de contacts à supprimer
  5. Pour chaque nom de contact à supprimer, utiliser la méthode .erase() pour le retirer de la map
  6. 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 empty

Les 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 Bob

Si 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;
}
quiz iconTestez-vous

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