맵 순회하기
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 키워드는 각 쌍에 대해 올바른 타입을 자동으로 결정하여, 코드를 더 깔끔하고 읽기 쉽게 만들어 줍니다.
챌린지
쉬움std::map을 사용하여 레스토랑 메뉴 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 메뉴 항목과 가격을 저장한 다음, 모든 키-값 쌍을 순회하며 전체 메뉴를 표시해야 합니다.
다음과 같은 입력이 제공됩니다:
- 메뉴 항목의 수를 나타내는 정수
n - 그 다음
n쌍의 입력:- 요리 이름을 나타내는 문자열
- 요리의 가격을 나타내는 double형 숫자
프로그램은 다음을 수행해야 합니다:
menu라는 이름의std::map<std::string, double>을 생성합니다.- 메뉴 항목의 수를 읽습니다.
- 각 메뉴 항목에 대해 요리 이름과 가격을 읽고, 대괄호 표기법을 사용하여 맵에 추가합니다.
- 범위 기반 for 루프(range-based for loop)를 사용하여 전체 맵을 순회하며 각 요리와 가격을 출력합니다.
- 메뉴에 있는 총 항목 수를 계산하여 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
Restaurant Menu:
[dish1]: $[price1]
[dish2]: $[price2]
[dish3]: $[price3]
...
Total menu items: [number of items]메뉴 항목은 맵을 순회할 때 나타나는 순서(요리 이름의 알파벳 순서)대로 출력되어야 합니다. auto pair : menu와 함께 범위 기반 for 루프를 사용하여 맵을 순회하고, 요리 이름은 pair.first로, 가격은 pair.second로 각 키-값 쌍에 접근하세요. 각 가격은 std::fixed와 std::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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.