Menu
Coddy logo textTech

Über eine Map iterieren

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy. Lektion 28 von 56.

Nachdem Sie nun wissen, wie man Elemente in einer Map erstellt, ändert und entfernt, lernen wir nun, wie man alle Schlüssel-Wert-Paare in Ihrer Map durchläuft. Die bereichsbasierte for-Schleife bietet eine elegante Möglichkeit, jedes Element in einer std::map zu iterieren.

Hier ist die grundlegende Syntax für das Iterieren über eine Map:

for (auto pair : myMap) {
    // Zugriff auf den Schlüssel mit pair.first
    // Zugriff auf den Wert mit pair.second
}

Jedes Element in der Schleife ist ein Paarobjekt, das zwei wichtige Member enthält: first enthält den Schlüssel und second enthält den Wert. Hier ist ein praktisches Beispiel:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

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

Dies gibt den Namen jedes Schülers gefolgt von seiner Punktzahl aus. Das Schlüsselwort auto bestimmt automatisch den richtigen Typ für jedes Paar, wodurch Ihr Code sauberer und einfacher zu lesen wird.

challenge icon

Aufgabe

Einfach

Erstelle ein Programm, das ein Restaurantmenüsystem mit einer std::map verwaltet. Dein Programm speichert Menüpunkte und ihre Preise und zeigt anschließend das vollständige Menü an, indem es alle Schlüssel-Wert-Paare durchläuft.

Die folgenden Eingaben werden bereitgestellt:

  • Eine Ganzzahl n, die die Anzahl der Menüpunkte angibt
  • Dann n Eingabepaare:
    • Eine Zeichenkette, die den Namen des Gerichts darstellt
    • Eine Gleitkommazahl, die den Preis des Gerichts darstellt

Dein Programm sollte:

  1. Eine std::map<std::string, double> namens menu erstellen
  2. Die Anzahl der Menüpunkte einlesen
  3. Für jeden Menüpunkt den Namen des Gerichts und den Preis einlesen und sie anschließend mithilfe der eckigen Klammernotation zur Map hinzufügen
  4. Eine bereichsbasierte for-Schleife verwenden, um die gesamte Map zu durchlaufen und jedes Gericht mit seinem Preis auszugeben
  5. Die Gesamtanzahl der Menüpunkte berechnen und ausgeben

Verwende das folgende exakte Ausgabeformat:

Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]

Die Menüpunkte sollten in der Reihenfolge ausgegeben werden, in der sie beim Durchlaufen der Map erscheinen (alphabetische Reihenfolge nach dem Namen des Gerichts). Verwende eine bereichsbasierte for-Schleife mit auto pair : menu, um die Map zu durchlaufen, und greife auf jedes Schlüssel-Wert-Paar mit pair.first für den Namen des Gerichts und pair.second für den Preis zu. Gib jeden Preis mit genau 2 Nachkommastellen mithilfe von std::fixed und std::setprecision(2) aus.

Probier es selbst

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

int main() {
    // Lies die Anzahl der Menüpunkte ein
    int n;
    cin >> n;
    
    // Erstelle die Menü-Map
    map<string, double> menu;
    
    // Lies Menüpunkte und Preise ein
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Füge das Gericht und den Preis zur Menü-Map hinzu
    }
    
    // TODO: Gib die Kopfzeile "Restaurant Menu:" aus
    
    // TODO: Verwende eine bereichsbasierte for-Schleife, um das Menü zu durchlaufen und jedes Element auszugeben
    // Format: [dish]: $[price] mit 2 Dezimalstellen
    
    // TODO: Gib die Gesamtzahl der Menüpunkte aus
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C++-Compiler