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.
Défi
FacileCré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
nreprésentant le nombre de livres dans la bibliothèque - Ensuite
npaires 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
mreprésentant le nombre de demandes de livres à vérifier - Ensuite
mchaînes de caractères représentant les titres des livres à rechercher
Votre programme doit :
- Créer un
std::map<std::string, int>nommélibrary - Lire le nombre de livres et remplir la map avec les titres des livres et leurs exemplaires disponibles
- Lire le nombre de demandes de livres
- Pour chaque demande de livre, utiliser la méthode
.count()pour vérifier si le livre existe dans la bibliothèque - 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;
}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