Menu
Coddy logo textTech

맵 생성하기

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

이제 맵이 무엇인지 이해했으므로, 맵을 생성하고 여기에 키-값 쌍을 추가하는 방법을 배워보겠습니다. std::map을 선언할 때는 꺾쇠괄호를 사용하여 키 유형과 값 유형을 모두 지정해야 합니다.

맵을 생성하는 기본 구문은 다음과 같습니다:

std::map<KeyType, ValueType> mapName;

예를 들어, 학생 이름을 키로 하고 시험 점수를 값으로 저장하는 맵을 생성하려면 다음과 같이 합니다:

std::map<std::string, int> studentScores;

맵에 요소를 추가하려면 키와 함께 대괄호 표기법을 사용한 다음 값을 할당하면 됩니다:

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

이것은 맵에 세 개의 키-값 쌍을 생성합니다. 각 학생의 이름은 해당 점수를 빠르게 검색할 수 있게 해주는 키 역할을 합니다.

맵의 모든 항목을 반복하려면 auto와 함께 범위 기반 for 루프(range-based for loop)를 사용하세요. std::map의 각 요소는 키-값 쌍이므로, .first로 키에 접근하고 .second로 값에 접근합니다:

for (const auto& pair : studentScores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

여기서 auto는 각 요소의 타입을 자동으로 추론하며, pair.first는 키(학생 이름)를 제공하고, pair.second는 값(점수)을 제공합니다. std::map은 항상 키를 기준으로 정렬된 순서로 반복된다는 점에 유의하세요.

challenge icon

챌린지

쉬움

std::map을 사용하여 학생 성적 관리 시스템을 구축하는 프로그램을 작성하세요. 이 프로그램은 학생의 이름을 키(key)로, 시험 점수를 값(value)으로 저장합니다.

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

  • 학생 수를 나타내는 정수 n
  • 그 다음 n 쌍의 입력:
    • 학생의 이름을 나타내는 문자열
    • 학생의 점수를 나타내는 정수

프로그램의 요구 사항은 다음과 같습니다:

  1. grades라는 이름의 std::map<std::string, int>를 생성합니다.
  2. 학생 수를 읽습니다.
  3. 각 학생에 대해 이름과 점수를 읽은 다음, 대괄호 표기법(square bracket notation)을 사용하여 맵에 추가합니다.
  4. 모든 학생을 추가한 후, 아래에 표시된 형식으로 각 학생의 정보를 출력합니다.
  5. 맵에 저장된 총 학생 수를 계산하여 출력합니다.

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

Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]

학생들은 맵을 순회할 때 나타나는 순서대로 출력되어야 합니다 (맵은 키를 기준으로 자동 정렬되므로 알파벳 순서가 됩니다). 범위 기반 for 루프(range-based for loop)를 사용하여 맵을 순회하고, 각 키-값 쌍에 접근하여 학생 이름과 점수를 차례로 출력하세요.

치트 시트

std::map을 생성하려면 꺾쇠괄호 안에 키와 값의 타입을 지정합니다:

std::map<KeyType, ValueType> mapName;

문자열 키와 정수 값을 사용하는 예시입니다:

std::map<std::string, int> studentScores;

대괄호 표기법을 사용하여 요소를 추가합니다:

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

범위 기반 for 루프를 사용하여 맵을 순회합니다. 각 요소는 쌍(pair)입니다. 키에 접근하려면 .first를 사용하고 값에 접근하려면 .second를 사용하세요:

for (const auto& pair : studentScores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

auto는 각 요소의 타입을 자동으로 추론하며, const auto&는 불필요한 복사를 방지합니다.

직접 해보기

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

int main() {
    // 학생 수를 읽습니다
    int n;
    cin >> n;
    
    // 성적을 저장할 맵을 생성합니다
    map<string, int> grades;
    
    // TODO: 여기에 코드를 작성하세요
    // 각 학생의 이름과 점수를 읽고 맵에 추가합니다
    
    
    // 결과를 출력합니다
    cout << "Student Grades:" << endl;
    // TODO: 범위 기반 for 루프를 사용하여 각 학생의 성적을 출력하세요
    
    
    // 총 학생 수를 출력합니다
    cout << "Total students: " << grades.size() << endl;
    
    return 0;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨