Menu
Coddy logo textTech

맵 순회하기

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 28번째.

이제 맵에서 요소를 생성, 수정 및 제거하는 방법을 알았으니, 맵의 모든 키-값 쌍을 살펴보는 방법을 배워보겠습니다. 범위 기반 for 루프는 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 키워드는 각 쌍에 대해 올바른 타입을 자동으로 결정하여, 코드를 더 깔끔하고 읽기 쉽게 만들어 줍니다.

challenge icon

챌린지

쉬움

std::map을 사용하여 레스토랑 메뉴 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 메뉴 항목과 가격을 저장한 다음, 모든 키-값 쌍을 순회하며 전체 메뉴를 표시해야 합니다.

다음과 같은 입력이 제공됩니다:

  • 메뉴 항목의 수를 나타내는 정수 n
  • 그 다음 n 쌍의 입력:
    • 요리 이름을 나타내는 문자열
    • 요리의 가격을 나타내는 double형 숫자

프로그램은 다음을 수행해야 합니다:

  1. menu라는 이름의 std::map<std::string, double>을 생성합니다.
  2. 메뉴 항목의 수를 읽습니다.
  3. 각 메뉴 항목에 대해 요리 이름과 가격을 읽고, 대괄호 표기법을 사용하여 맵에 추가합니다.
  4. 범위 기반 for 루프(range-based for loop)를 사용하여 전체 맵을 순회하며 각 요리와 가격을 출력합니다.
  5. 메뉴에 있는 총 항목 수를 계산하여 출력합니다.

다음과 같은 정확한 출력 형식을 사용하세요:

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

메뉴 항목은 맵을 순회할 때 나타나는 순서(요리 이름의 알파벳 순서)대로 출력되어야 합니다. auto pair : menu와 함께 범위 기반 for 루프를 사용하여 맵을 순회하고, 요리 이름은 pair.first로, 가격은 pair.second로 각 키-값 쌍에 접근하세요. 각 가격은 std::fixedstd::setprecision(2)를 사용하여 소수점 이하 정확히 2자리까지 출력하세요.

치트 시트

범위 기반 for 루프를 사용하여 std::map의 모든 키-값 쌍을 순회합니다:

for (auto pair : myMap) {
    // pair.first로 키에 접근합니다
    // pair.second로 값에 접근합니다
}

각 요소는 first가 키를 저장하고 second가 값을 저장하는 pair 객체입니다:

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 키워드는 각 pair에 맞는 정확한 타입을 자동으로 결정합니다.

직접 해보기

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

int main() {
    // 메뉴 항목의 수를 읽습니다
    int n;
    cin >> n;
    
    // 메뉴 맵을 생성합니다
    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실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직과 흐름의 모든 레슨