Menu
Coddy logo textTech

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 95

La même syntaxe fonctionne pour mettre à jour des valeurs existantes :

scores["Alice"] = 98; // Met à jour le score d'Alice à 98

Voici 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 0

Cette 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.

challenge icon

Défi

Facile

Cré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 n représentant le nombre de produits initiaux
  • Ensuite n paires 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 :

  1. Créer un std::map<std::string, int> nommé inventory
  2. Lire le nombre de produits initiaux
  3. Pour chaque produit, lire le nom et la quantité de stock, puis les ajouter à la map en utilisant la notation entre crochets
  4. Afficher l'inventaire initial dans le format indiqué ci-dessous
  5. Lire le nom du produit et la nouvelle quantité à mettre à jour
  6. Utiliser l'opérateur crochet pour mettre à jour la quantité de stock pour le produit spécifié
  7. 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 valeur

Si 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 0

Utilisez 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;
}
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