Menu
Coddy logo textTech

값 접근 및 수정하기

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

이렇게 하면 맵에 저장된 모든 키-값 쌍이 한 줄에 하나씩 출력됩니다.

challenge icon

챌린지

쉬움

std::map을 사용하여 제품 재고 관리 시스템을 관리하는 프로그램을 작성하세요. 프로그램은 제품 이름과 현재 재고 수량을 추적하며, 재고 수준에 접근하고 업데이트할 수 있어야 합니다.

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

  • 초기 제품의 수를 나타내는 정수 n
  • 그 다음 n 쌍의 입력:
    • 제품 이름을 나타내는 문자열
    • 초기 재고 수량을 나타내는 정수
  • 업데이트할 제품 이름을 나타내는 문자열
  • 해당 제품의 새로운 재고 수량을 나타내는 정수

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

  1. inventory라는 이름의 std::map<std::string, int>를 생성합니다.
  2. 초기 제품의 수를 읽습니다.
  3. 각 제품에 대해 이름과 재고 수량을 읽은 다음, 대괄호 표기법을 사용하여 맵에 추가합니다.
  4. 아래에 표시된 형식으로 초기 재고를 출력합니다.
  5. 업데이트할 제품 이름과 새로운 수량을 읽습니다.
  6. 대괄호 연산자를 사용하여 지정된 제품의 재고 수량을 업데이트합니다.
  7. 수정된 재고 수준을 보여주는 업데이트된 재고를 출력합니다.

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

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;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨