값 접근 및 수정하기
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 25번째.
키-값 쌍이 있는 맵(map)이 있으면, 그 안에 저장된 값을 검색하거나 업데이트해야 할 때가 많습니다. 대괄호 [] 연산자는 기존 값에 접근하고 수정하는 편리한 방법을 제공합니다.
값에 액세스하려면 대괄호 안에 키를 사용하기만 하면 됩니다:
std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // 95를 가져옵니다기존 값을 업데이트할 때도 동일한 구문이 작동합니다:
scores["Alice"] = 98; // Alice의 점수를 98로 업데이트합니다기억해야 할 중요한 동작이 있습니다: 만약 맵에 존재하지 않는 키와 함께 [] 연산자를 사용하면, 해당 키를 가진 새로운 요소를 자동으로 생성하고 기본값(정수의 경우 0, 문자열의 경우 빈 문자열 등)으로 초기화합니다.
int bobScore = scores["Bob"]; // 값이 0인 "Bob"을 생성합니다이 자동 생성 기능은 사용하기 전에 키가 존재하는지 확인할 필요가 없기 때문에, 맵 데이터를 읽고 쓰는 데 [] 연산자를 매우 편리하게 만듭니다.
범위 기반 for 루프를 사용하여 맵의 모든 키-값 쌍을 반복할 수도 있습니다. 맵의 각 요소는 pair이며, pair.first는 키를 저장하고 pair.second는 값을 저장합니다:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}이렇게 하면 맵에 저장된 모든 키-값 쌍이 한 줄에 하나씩 출력됩니다.
챌린지
쉬움std::map을 사용하여 제품 재고 관리 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 제품 이름과 현재 재고 수량을 추적하며, 재고 수준에 접근하고 업데이트할 수 있어야 합니다.
다음과 같은 입력이 제공됩니다:
- 초기 제품의 수를 나타내는 정수
n - 그 다음
n쌍의 입력:- 제품 이름을 나타내는 문자열
- 초기 재고 수량을 나타내는 정수
- 업데이트할 제품 이름을 나타내는 문자열
- 해당 제품의 새로운 재고 수량을 나타내는 정수
프로그램은 다음을 수행해야 합니다:
inventory라는 이름의std::map<std::string, int>를 생성합니다.- 초기 제품의 수를 읽습니다.
- 각 제품에 대해 이름과 재고 수량을 읽은 다음, 대괄호 표기법을 사용하여 맵에 추가합니다.
- 아래에 표시된 형식으로 초기 재고를 출력합니다.
- 업데이트할 제품 이름과 새로운 수량을 읽습니다.
- 대괄호 연산자를 사용하여 지정된 제품의 재고 수량을 업데이트합니다.
- 수정된 재고 수준을 보여주는 업데이트된 재고를 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...제품은 맵을 순회할 때 나타나는 순서(제품 이름의 알파벳 순서)대로 출력되어야 합니다. 두 번 모두 범위 기반 for 루프를 사용하여 맵을 순회하며, 제품 이름은 pair.first로, 수량은 pair.second로 각 키-값 쌍에 접근하세요. 업데이트할 제품 이름이 맵에 존재하지 않는 경우, 대괄호 연산자는 해당 이름과 지정된 수량으로 새로운 항목을 자동으로 생성합니다.
치트 시트
대괄호 [] 연산자를 사용하여 맵의 값을 액세스하고 수정합니다:
std::map<std::string, int> scores;
scores["Alice"] = 95; // 값 설정
int aliceScore = scores["Alice"]; // 값 가져오기
scores["Alice"] = 98; // 값 업데이트존재하지 않는 키와 함께 []를 사용하면, 기본값을 가진 새 요소가 자동으로 생성됩니다:
int bobScore = scores["Bob"]; // 값이 0인 "Bob"을 생성합니다범위 기반 for 루프를 사용하여 모든 키-값 쌍을 반복합니다. 각 쌍은 키를 위한 .first와 값을 위한 .second를 가집니다:
for (auto pair : scores) {
// pair.first = 키 (예: "Alice")
// pair.second = 값 (예: 98)
}직접 해보기
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// 초기 제품의 수를 읽습니다
int n;
cin >> n;
// 인벤토리 맵을 생성합니다
map<string, int> inventory;
// 초기 제품과 수량을 읽습니다
for (int i = 0; i < n; i++) {
string product;
int quantity;
cin >> product >> quantity;
// TODO: 인벤토리 맵에 제품을 추가합니다
}
// TODO: 초기 인벤토리를 출력합니다
// 업데이트할 제품과 새로운 수량을 읽습니다
string updateProduct;
int newQuantity;
cin >> updateProduct >> newQuantity;
// TODO: 맵에서 제품 수량을 업데이트합니다
// TODO: 업데이트된 인벤토리를 출력합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.