Menu
Coddy logo textTech

Iterowanie po mapie

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 28 z 56.

Skoro wiesz już, jak tworzyć, modyfikować i usuwać elementy z mapy, nauczmy się przechodzić przez wszystkie pary klucz-wartość w mapie. Pętla for oparta na zakresie pozwala w elegancki sposób iterować po każdym elemencie w std::map.

Oto podstawowa składnia iterowania po mapie:

for (auto pair : myMap) {
    // Uzyskaj dostęp do klucza za pomocą pair.first
    // Uzyskaj dostęp do wartości za pomocą pair.second
}

Każdy element pętli jest obiektem pary, który zawiera dwóch ważnych składowych: first przechowuje klucz, a second przechowuje wartość. Oto praktyczny przykład:

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

Spowoduje to wyświetlenie imienia i nazwiska każdego ucznia, a następnie jego wyniku. Słowo kluczowe auto automatycznie określa właściwy typ dla każdej pary, dzięki czemu kod jest czytelniejszy i łatwiejszy do zrozumienia.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza systemem menu restauracji za pomocą std::map. Program będzie przechowywać pozycje menu i ich ceny, a następnie wyświetli całe menu, iterując przez wszystkie pary klucz-wartość.

Podane zostaną następujące dane wejściowe:

  • Liczba całkowita n reprezentująca liczbę pozycji menu
  • Następnie n par danych wejściowych:
    • Ciąg znaków reprezentujący nazwę dania
    • Liczba typu double reprezentująca cenę dania

Program powinien:

  1. Utworzyć obiekt std::map<std::string, double> o nazwie menu
  2. Odczytać liczbę pozycji menu
  3. Dla każdej pozycji menu odczytać nazwę dania i cenę, a następnie dodać je do mapy, używając notacji nawiasów kwadratowych
  4. Użyć pętli for opartej na zakresie, aby przejść przez całą mapę i wypisać każde danie wraz z jego ceną
  5. Obliczyć i wypisać łączną liczbę pozycji w menu

Użyj następującego dokładnego formatu wyjściowego:

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

Pozycje menu powinny być wypisywane w kolejności, w jakiej pojawiają się podczas iteracji przez mapę (alfabetycznie według nazwy dania). Użyj pętli for opartej na zakresie z auto pair : menu, aby przejść przez mapę, uzyskując dostęp do każdej pary klucz-wartość za pomocą pair.first dla nazwy dania i pair.second dla ceny. Wypisz każdą cenę z dokładnie 2 miejscami po przecinku, używając std::fixed i std::setprecision(2).

Spróbuj swoich sił

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

int main() {
    // Wczytaj liczbę pozycji w menu
    int n;
    cin >> n;
    
    // Utwórz mapę menu
    map<string, double> menu;
    
    // Wczytaj pozycje menu i ich ceny
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Dodaj danie i jego cenę do mapy menu
    }
    
    // TODO: Wypisz nagłówek "Restaurant Menu:"
    
    // TODO: Użyj pętli for opartej na zakresie, aby przejść przez menu i wypisać każdą pozycję
    // Format: [dish]: $[price] z 2 miejscami po przecinku
    
    // TODO: Wypisz łączną liczbę pozycji w menu
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator C++ online