Menu
Coddy logo textTech

Créer une Map

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

Maintenant que vous comprenez ce qu'est une map, apprenons comment en créer une et y ajouter des paires clé-valeur. Lors de la déclaration d'une std::map, vous devez spécifier à la fois le type de la clé et le type de la valeur en utilisant des chevrons.

Voici la syntaxe de base pour créer une map :

std::map<KeyType, ValueType> mapName;

Par exemple, pour créer une map qui stocke les noms des étudiants comme clés et leurs scores aux tests comme valeurs :

std::map<std::string, int> studentScores;

Pour ajouter des éléments à votre map, vous pouvez utiliser la notation entre crochets avec la clé, puis assigner une valeur :

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

Ceci crée trois paires clé-valeur dans la map. Le nom de chaque étudiant sert de clé qui vous permet de récupérer rapidement son score correspondant.

Pour itérer sur toutes les entrées d'une map, utilisez une boucle for basée sur l'intervalle (range-based for loop) avec auto. Chaque élément d'une std::map est une paire clé-valeur, vous accédez donc à la clé avec .first et à la valeur avec .second :

for (const auto& pair : studentScores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

Ici, auto déduit automatiquement le type de chaque élément, pair.first donne la clé (nom de l'étudiant), et pair.second donne la valeur (score). Notez que std::map itère toujours dans l'ordre trié par clé.

challenge icon

Défi

Facile

Créez un programme qui construit un système de suivi des notes des étudiants à l'aide d'un std::map. Votre programme stockera les noms des étudiants comme clés et leurs scores aux tests comme valeurs.

Les entrées suivantes seront fournies :

  • Un entier n représentant le nombre d'étudiants
  • Ensuite n paires d'entrées :
    • Une chaîne de caractères représentant le nom de l'étudiant
    • Un entier représentant le score de l'étudiant

Votre programme doit :

  1. Créer un std::map<std::string, int> nommé grades
  2. Lire le nombre d'étudiants
  3. Pour chaque étudiant, lire son nom et son score, puis les ajouter à la map en utilisant la notation entre crochets
  4. Après avoir ajouté tous les étudiants, afficher les informations de chaque étudiant selon le format indiqué ci-dessous
  5. Calculer et afficher le nombre total d'étudiants stockés dans la map

Utilisez exactement le format de sortie suivant :

Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]

Les étudiants doivent être affichés dans l'ordre dans lequel ils apparaissent lors de l'itération dans la map (ce qui sera l'ordre alphabétique puisque les maps trient automatiquement par clé). Utilisez une boucle for basée sur une plage (range-based for loop) pour parcourir la map, en accédant à chaque paire clé-valeur et en affichant le nom de l'étudiant suivi de son score.

Aide-mémoire

Pour créer un std::map, spécifiez les types de clé et de valeur entre chevrons :

std::map<KeyType, ValueType> mapName;

Exemple avec des clés de type chaîne de caractères et des valeurs entières :

std::map<std::string, int> studentScores;

Ajoutez des éléments en utilisant la notation entre crochets :

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

Parcourez une map à l'aide d'une boucle for basée sur une plage. Chaque élément est une paire — utilisez .first pour accéder à la clé et .second pour accéder à la valeur :

for (const auto& pair : studentScores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

auto déduit automatiquement le type de chaque élément, et const auto& évite les copies inutiles.

Essayez vous-même

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

int main() {
    // Lire le nombre d'étudiants
    int n;
    cin >> n;
    
    // Créer la map pour stocker les notes
    map<string, int> grades;
    
    // TODO : Écrivez votre code ici
    // Lire le nom et le score de chaque étudiant, puis les ajouter à la map
    
    
    // Afficher les résultats
    cout << "Student Grades:" << endl;
    // TODO : Utiliser une boucle for basée sur une plage pour afficher la note de chaque étudiant
    
    
    // Afficher le nombre total d'étudiants
    cout << "Total students: " << grades.size() << endl;
    
    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