Menu
Coddy logo textTech

Vérifier l'existence de clés

Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 26 sur 56.

Bien que l'opérateur crochet soit pratique pour accéder aux valeurs d'une map, il y a un problème potentiel : que se passe-t-il si vous essayez d'accéder à une clé qui n'existe pas ? Comme vous l'avez appris dans la leçon précédente, l'utilisation de [] avec une clé inexistante crée automatiquement cette clé avec une valeur par défaut.

Parfois, vous voulez vérifier si une clé existe avant d'y accéder, sans créer accidentellement de nouvelles entrées. C'est là que la méthode .count() devient utile. Elle vous indique si une clé spécifique est présente dans la map.

La méthode .count() retourne 1 si la clé existe et 0 si elle n'existe pas :

std::map<std::string, int> scores;
scores["Alice"] = 95;

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

Cette approche vous permet de vérifier en toute sécurité l'existence d'une clé et de gérer les deux cas de manière appropriée, évitant ainsi la création d'entrées indésirables dans votre map.

challenge icon

Défi

Facile

Créez un programme qui gère un système d'emprunt de livres de bibliothèque en utilisant un std::map. Votre programme suivra quels livres sont disponibles et utilisera la méthode .count() pour vérifier en toute sécurité si les livres existent avant de tenter d'accéder à leurs informations.

Les entrées suivantes seront fournies :

  • Un entier n représentant le nombre de livres dans la bibliothèque
  • Ensuite n paires d'entrées :
    • Une chaîne de caractères représentant le titre du livre
    • Un entier représentant le nombre d'exemplaires disponibles
  • Un entier m représentant le nombre de demandes de livres à vérifier
  • Ensuite m chaînes de caractères représentant les titres des livres à rechercher

Votre programme doit :

  1. Créer un std::map<std::string, int> nommé library
  2. Lire le nombre de livres et remplir la map avec les titres des livres et leurs exemplaires disponibles
  3. Lire le nombre de demandes de livres
  4. Pour chaque demande de livre, utiliser la méthode .count() pour vérifier si le livre existe dans la bibliothèque
  5. Afficher le message approprié selon que le livre est trouvé ou non

Utilisez le format de sortie exact suivant :

Pour chaque demande de livre :

  • Si le livre existe : Book "[book title]" is available with [number] copies
  • Si le livre n'existe pas : Book "[book title]" is not available in the library

Utilisez la méthode .count() dans une instruction if pour vérifier l'existence du livre avant d'accéder à sa valeur. Si library.count(bookTitle) retourne 1, le livre existe et vous pouvez accéder en toute sécurité à library[bookTitle] pour obtenir le nombre d'exemplaires. S'il retourne 0, le livre n'existe pas dans la bibliothèque.

Aide-mémoire

La méthode .count() vérifie si une clé existe dans une map sans créer de nouvelles entrées. Elle renvoie 1 si la clé existe et 0 si elle n'existe pas :

std::map<std::string, int> scores;
scores["Alice"] = 95;

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

Cela évite de créer accidentellement des entrées indésirables lors de la vérification de l'existence d'une clé, contrairement à l'utilisation de l'opérateur crochet [] qui crée automatiquement des clés avec des valeurs par défaut.

Essayez vous-même

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // Lire le nombre de livres
    int n;
    cin >> n;
    
    // Créer la map de la bibliothèque
    map<string, int> library;
    
    // Lire les informations sur les livres et remplir la map
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // Lire le nombre de demandes de livres
    int m;
    cin >> m;
    
    // TODO : Écrivez votre code ci-dessous
    // Traiter chaque demande de livre en utilisant la méthode .count()
    // Vérifier si le livre existe et afficher le message approprié
    
    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