Menu
Coddy logo textTech

Итерация по словарю

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 28 из 56.

Теперь, когда вы знаете, как создавать, изменять и удалять элементы из map, давайте узнаем, как перебрать все пары «ключ-значение» в вашем объекте map. Цикл for на основе диапазона (range-based for loop) предоставляет элегантный способ итерации по каждому элементу в std::map.

Вот базовый синтаксис для итерации по map:

for (auto pair : myMap) {
    // Доступ к ключу через pair.first
    // Доступ к значению через pair.second
}

Каждый элемент в цикле представляет собой объект pair, который содержит два важных члена: first хранит ключ, а second хранит значение. Вот практический пример:

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

Это выведет имя каждого студента, а затем его оценку. Ключевое слово auto автоматически определяет правильный тип для каждой пары, делая ваш код чище и легче для чтения.

challenge icon

Задание

Легко

Создайте программу, которая управляет системой меню ресторана, используя std::map. Ваша программа будет хранить пункты меню и их цены, а затем отображать полное меню, перебирая все пары ключ-значение.

Будут предоставлены следующие входные данные:

  • Целое число n, представляющее количество пунктов меню
  • Затем n пар входных данных:
    • Строка, представляющая название блюда
    • Число типа double, представляющее цену блюда

Ваша программа должна:

  1. Создать std::map<std::string, double> с именем menu
  2. Считать количество пунктов меню
  3. Для каждого пункта меню считать название блюда и цену, а затем добавить их в карту, используя нотацию с квадратными скобками
  4. Использовать цикл for на основе диапазона (range-based for loop) для итерации по всей карте и вывода каждого блюда с его ценой
  5. Вычислить и вывести общее количество пунктов в меню

Используйте следующий точный формат вывода:

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

Пункты меню должны быть выведены в том порядке, в котором они появляются при итерации по карте (в алфавитном порядке по названию блюда). Используйте цикл for на основе диапазона с auto pair : menu для итерации по карте, обращаясь к каждой паре ключ-значение через pair.first для названия блюда и pair.second для цены. Выводите каждую цену ровно с 2 знаками после запятой, используя std::fixed и std::setprecision(2).

Шпаргалка

Используйте цикл for на основе диапазона (range-based for loop) для итерации по всем парам ключ-значение в std::map:

for (auto pair : myMap) {
    // Доступ к ключу через pair.first
    // Доступ к значению через pair.second
}

Каждый элемент представляет собой объект pair, где first содержит ключ, а second — значение:

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

Ключевое слово auto автоматически определяет правильный тип для каждой пары.

Попробуйте сами

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

int main() {
    // Считать количество позиций в меню
    int n;
    cin >> n;
    
    // Создать карту (map) для меню
    map<string, double> menu;
    
    // Считать названия блюд и цены
    for (int i = 0; i < n; i++) {
        string dish;
        double price;
        cin >> dish >> price;
        // TODO: Добавить блюдо и цену в карту меню
    }
    
    // TODO: Вывести заголовок "Restaurant Menu:"
    
    // TODO: Использовать цикл for на основе диапазона для итерации по меню и вывода каждого элемента
    // Формат: [dish]: $[price] с 2 знаками после запятой
    
    // TODO: Вывести общее количество позиций в меню
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком