Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL map::operator[] 연산자 – 개념, 문법, 예제 총정리

이 글에서는 C++ STL에서 map::operator[](대괄호 [] 연산자)의 동작 원리, 문법 그리고 실제 예제를 자세히 살펴보겠습니다.

C++ STL에서 맵(Map)이란?

맵(Map)은 연관 컨테이너(associative container)의 한 종류로, 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있도록 도와줍니다. 맵 컨테이너 내부에서 데이터는 항상 연관된 키를 기준으로 자동 정렬되며, 각 요소는 고유한 키를 통해서만 접근할 수 있습니다.

map::operator[]란 무엇인가?

map::operator[]는 참조 연산자(reference operator)로, 키를 이용해 컨테이너 내부의 요소에 접근할 때 사용됩니다.

만약 컨테이너 안에 해당 키가 존재하지 않으면, 이 연산자는 그 키로 새로운 요소를 자동으로 삽입한 뒤 매핑된 값의 참조를 반환합니다. 동작 방식은 map::at()과 유사하지만 중요한 차이점이 하나 있습니다. at()은 키가 맵에 존재하지 않을 경우 out_of_range 예외를 던지는 반면, operator[]는 새 요소를 생성한다는 점입니다.

문법(Syntax)

Map_name[key];

매개변수(Parameter)

매개변수는 단 하나뿐입니다. 바로 컨테이너에서 참조하고자 하는 키 k입니다.

반환값(Return Value)

이 연산자는 키 k와 연관된 값(value)의 참조를 반환합니다.

입력 예시

map<int, int> newmap;
newmap.insert({1, 20});
newmap.insert({2, 30});
newmap[1];

출력 결과

20

예제 1

#include <bits/stdc++.h>
using namespace std;

int main(){
    map<int, int> TP_1;
    TP_1[1] = 10;
    TP_1[2] = 20;
    TP_1[3] = 30;
    TP_1[4] = 40;

    cout << "Element at TP[3] is : " << TP_1[3];
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Element at TP[3] is : 30

예제 2

#include <bits/stdc++.h>
using namespace std;

int main(){
    map<int, int> TP_1;
    TP_1[1] = 10;
    TP_1[2] = 20;
    TP_1[3] = 30;
    TP_1[4] = 40;

    cout << "Element at TP[3] is : " << TP_1[3];

    if(TP_1[5] == 0){
        cout << "\nElement at TP[5] doesn't exist";
    }
    else{
        cout << "Element at TP[5] is : " << TP_1[5];
    }
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Element at TP[3] is : 30
Element at TP[5] doesn't exist

주의할 점

operator[]는 존재하지 않는 키로 접근할 때 새 요소를 삽입한다는 점에 유의해야 합니다. 예제 2에서 TP_1[5]에 접근하는 순간 값이 0인 새 요소가 맵에 추가됩니다. 따라서 단순히 키의 존재 여부만 확인하고 싶다면 find() 또는 count() 함수를 사용하는 것이 맵을 변경하지 않고 안전하게 검사할 수 있는 방법입니다.