Accéder aux valeurs et les modifier
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 25 sur 56.
Une fois que vous avez une map avec des paires clé-valeur, vous aurez souvent besoin de récupérer ou de mettre à jour les valeurs qui y sont stockées. L'opérateur crochet [] offre un moyen pratique d'accéder aux valeurs existantes et de les modifier.
Pour accéder à une valeur, utilisez simplement la clé entre crochets :
std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // Récupère 95La même syntaxe fonctionne pour mettre à jour des valeurs existantes :
scores["Alice"] = 98; // Met à jour le score d'Alice à 98Voici un comportement important à retenir : si vous utilisez l'opérateur [] avec une clé qui n'existe pas dans la map, il crée automatiquement un nouvel élément avec cette clé et l'initialise avec une valeur par défaut (0 pour les entiers, une chaîne vide pour les chaînes de caractères, etc.).
int bobScore = scores["Bob"]; // Crée "Bob" avec la valeur 0Cette fonctionnalité de création automatique rend l'opérateur [] très pratique pour la lecture comme pour l'écriture de données de map, car vous n'avez pas besoin de vérifier si une clé existe avant de l'utiliser.
Vous pouvez également parcourir toutes les paires clé-valeur d'une map en utilisant une boucle for basée sur une plage (range-based). Chaque élément de la map est une paire, où pair.first contient la clé et pair.second contient la valeur :
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Cela affichera chaque paire clé-valeur stockée dans la map, une par ligne.
Défi
FacileCréez un programme qui gère un système d'inventaire de produits à l'aide d'un std::map. Votre programme suivra les noms des produits et leurs quantités de stock actuelles, vous permettant d'accéder et de mettre à jour les niveaux d'inventaire.
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre de produits initiaux - Ensuite
npaires d'entrées :- Une chaîne de caractères représentant le nom du produit
- Un entier représentant la quantité de stock initiale
- Une chaîne de caractères représentant le nom d'un produit à mettre à jour
- Un entier représentant la nouvelle quantité de stock pour ce produit
Votre programme doit :
- Créer un
std::map<std::string, int>nomméinventory - Lire le nombre de produits initiaux
- Pour chaque produit, lire le nom et la quantité de stock, puis les ajouter à la map en utilisant la notation entre crochets
- Afficher l'inventaire initial dans le format indiqué ci-dessous
- Lire le nom du produit et la nouvelle quantité à mettre à jour
- Utiliser l'opérateur crochet pour mettre à jour la quantité de stock pour le produit spécifié
- Afficher l'inventaire mis à jour montrant le niveau de stock modifié
Utilisez exactement le format de sortie suivant :
Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...Les produits doivent être affichés dans l'ordre où ils apparaissent lors de l'itération dans la map (ordre alphabétique par nom de produit). Utilisez une boucle for basée sur une plage (range-based for loop) pour itérer dans la map les deux fois, en accédant à chaque paire clé-valeur avec pair.first pour le nom du produit et pair.second pour la quantité. Si le nom du produit à mettre à jour n'existe pas dans la map, l'opérateur crochet créera automatiquement une nouvelle entrée avec ce nom et la quantité spécifiée.
Aide-mémoire
Utilisez l'opérateur crochet [] pour accéder aux valeurs de la map et les modifier :
std::map<std::string, int> scores;
scores["Alice"] = 95; // Définir la valeur
int aliceScore = scores["Alice"]; // Obtenir la valeur
scores["Alice"] = 98; // Mettre à jour la valeurSi vous utilisez [] avec une clé qui n'existe pas, cela crée automatiquement un nouvel élément avec une valeur par défaut :
int bobScore = scores["Bob"]; // Crée "Bob" avec la valeur 0Utilisez une boucle for basée sur une plage pour parcourir toutes les paires clé-valeur. Chaque paire possède .first pour la clé et .second pour la valeur :
for (auto pair : scores) {
// pair.first = clé (ex. "Alice")
// pair.second = valeur (ex. 98)
}Essayez vous-même
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Lire le nombre de produits initiaux
int n;
cin >> n;
// Créer la map de l'inventaire
map<string, int> inventory;
// Lire les produits initiaux et les quantités
for (int i = 0; i < n; i++) {
string product;
int quantity;
cin >> product >> quantity;
// TODO: Ajouter le produit à la map de l'inventaire
}
// TODO: Afficher l'inventaire initial
// Lire le produit à mettre à jour et la nouvelle quantité
string updateProduct;
int newQuantity;
cin >> updateProduct >> newQuantity;
// TODO: Mettre à jour la quantité du produit dans la map
// TODO: Afficher l'inventaire mis à jour
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