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

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

challenge icon

Défi

Facile

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

Votre programme doit :

  1. Créer une std::map<std::string, std::string> nommée contacts
  2. Lire le nombre de contacts initiaux et remplir la map avec les noms et les numéros de téléphone des contacts
  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 supprimer 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 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;
}
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

Entraînez-vous par vous-même : Compilateur C++ en ligne