Erstellen einer Map
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 24 von 56.
Nachdem Sie nun verstanden haben, was eine Map ist, lernen wir, wie man eine erstellt und ihr Schlüssel-Wert-Paare hinzufügt. Beim Deklarieren einer std::map müssen Sie sowohl den Schlüsseltyp als auch den Werttyp mithilfe von spitzen Klammern angeben.
Hier ist die grundlegende Syntax zum Erstellen einer Map:
std::map<KeyType, ValueType> mapName;Zum Beispiel, um eine Map zu erstellen, die Studentennamen als Schlüssel und deren Testergebnisse als Werte speichert:
std::map<std::string, int> studentScores;Um Elemente zu Ihrer Map hinzuzufügen, können Sie die eckige Klammerschreibweise mit dem Schlüssel verwenden und dann einen Wert zuweisen:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Dies erstellt drei Schlüssel-Wert-Paare in der Map. Der Name jedes Schülers dient als Schlüssel, mit dem Sie die entsprechende Punktzahl schnell abrufen können.
Um über alle Einträge in einer Map zu iterieren, verwenden Sie eine range-based for-Schleife mit auto. Jedes Element in einer std::map ist ein Schlüssel-Wert-Paar, daher greifen Sie auf den Schlüssel mit .first und auf den Wert mit .second zu:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Hier leitet auto automatisch den Typ jedes Elements ab, pair.first liefert den Schlüssel (Name des Studenten) und pair.second liefert den Wert (Punktzahl). Beachten Sie, dass std::map immer in sortierter Reihenfolge nach dem Schlüssel iteriert.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Notenverwaltungssystem für Schüler unter Verwendung einer std::map aufbaut. Ihr Programm soll Schülernamen als Schlüssel und deren Testergebnisse als Werte speichern.
Die folgenden Eingaben werden bereitgestellt:
- Ein Integer
n, der die Anzahl der Schüler darstellt - Anschließend
nPaare von Eingaben:- Ein String, der den Namen des Schülers darstellt
- Ein Integer, der die Punktzahl des Schülers darstellt
Ihr Programm sollte:
- Eine
std::map<std::string, int>namensgradeserstellen - Die Anzahl der Schüler einlesen
- Für jeden Schüler den Namen und die Punktzahl einlesen und diese dann mit der eckigen Klammerschreibweise zur Map hinzufügen
- Nachdem alle Schüler hinzugefügt wurden, die Informationen jedes Schülers im unten gezeigten Format ausgeben
- Die Gesamtzahl der in der Map gespeicherten Schüler berechnen und ausgeben
Verwenden Sie genau das folgende Ausgabeformat:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]Die Schüler sollten in der Reihenfolge ausgegeben werden, in der sie beim Iterieren durch die Map erscheinen (was alphabetische Reihenfolge ist, da Maps automatisch nach Schlüsseln sortieren). Verwenden Sie eine bereichsbasierte for-Schleife (range-based for loop), um durch die Map zu iterieren, auf jedes Schlüssel-Wert-Paar zuzugreifen und den Schülernamen gefolgt von seiner Punktzahl auszugeben.
Spickzettel
Um eine std::map zu erstellen, geben Sie die Schlüssel- und Werttypen in spitzen Klammern an:
std::map<KeyType, ValueType> mapName;Beispiel mit String-Schlüsseln und Integer-Werten:
std::map<std::string, int> studentScores;Fügen Sie Elemente mithilfe der eckigen Klammerschreibweise hinzu:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Iterieren Sie über eine Map mit einer bereichsbasierten for-Schleife. Jedes Element ist ein Paar – verwenden Sie .first, um auf den Schlüssel zuzugreifen, und .second, um auf den Wert zuzugreifen:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}auto leitet den Typ jedes Elements automatisch ab, und const auto& vermeidet unnötiges Kopieren.
Probier es selbst
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Lies die Anzahl der Schüler ein
int n;
cin >> n;
// Erstelle die Map, um Noten zu speichern
map<string, int> grades;
// TODO: Schreibe deinen Code hier
// Lies den Namen und die Punktzahl jedes Schülers ein und füge sie der Map hinzu
// Gib die Ergebnisse aus
cout << "Student Grades:" << endl;
// TODO: Verwende eine bereichsbasierte for-Schleife, um die Note jedes Schülers auszugeben
// Gib die Gesamtzahl der Schüler aus
cout << "Total students: " << grades.size() << endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung4Maps (Schlüssel-Wert-Paare)
Einführung in std::mapErstellen einer MapWerte abrufen und ändernAuf Schlüssel prüfenPaare entfernenÜber eine Map iterierenZusammenfassung – Wortfrequenz2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen