이 글에서는 C++ STL에서 map::at() 함수의 동작 방식, 구문 그리고 실제 사용 예제에 대해 자세히 살펴보겠습니다.
C++ STL에서 맵(Map)이란?
맵(Map)은 연관 컨테이너(associative container)의 일종으로, 키(key)와 매핑된 값(mapped value)의 쌍으로 구성된 요소들을 특정 순서에 따라 저장할 수 있도록 해줍니다. 맵 컨테이너의 데이터는 내부적으로 항상 키를 기준으로 정렬되어 관리되며, 각 요소는 고유한 키를 통해 접근할 수 있습니다.
map::at()란 무엇인가?
map::at() 함수는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. at() 함수는 맵 컨테이너에서 특정 요소에 접근할 때 사용되며, 지정한 키와 연관된 값에 대한 참조(reference)를 반환합니다.
만약 찾고자 하는 키가 맵 컨테이너에 존재하지 않는다면, 이 함수는 out_of_range 예외를 발생시킵니다. 이는 operator[]와의 중요한 차이점입니다. operator[]는 존재하지 않는 키로 접근할 경우 해당 키로 새 요소를 생성하는 반면, at()은 예외를 던지므로 잘못된 키 접근을 안전하게 처리할 수 있습니다.
구문(Syntax)
map_name.at(key& k);
매개변수(Parameters)
이 함수는 하나의 매개변수를 받습니다.
- k: 접근하고자 하는 값과 연관된 키
반환 값(Return Value)
이 함수는 찾고자 하는 키 k와 연관된 값에 대한 참조를 반환합니다.
예제 1
입력
std::map<char, int> mymap;
mymap.insert({'a', 10});
mymap.insert({'b', 20});
mymap.insert({'c', 30});
mymap.at('b');
출력
b: 20
예제 2
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_1;
map<int, int> TP_2;
TP_1[1] = 10;
TP_1[2] = 20;
TP_1[3] = 30;
TP_1[4] = 40;
TP_2[5] = 50;
TP_2[6] = 60;
TP_2[7] = 70;
cout<<"TP_1[1]의 요소 = "<< TP_1.at(1) << endl;
cout<<"TP_1[2]의 요소 = "<< TP_1.at(2) << endl;
cout<<"TP_1[3]의 요소 = "<< TP_1.at(3) << endl;
cout<<"\nTP_2[7]의 요소 = "<< TP_2.at(7) << endl;
cout<<"TP_2[5]의 요소 = "<< TP_2.at(5) << endl;
return 0;
}
출력
TP_1[1]의 요소 = 10 TP_1[2]의 요소 = 20 TP_1[3]의 요소 = 30 TP_2[7]의 요소 = 70 TP_2[5]의 요소 = 50
마무리
map::at() 함수는 맵 컨테이너에서 키를 기반으로 요소에 안전하게 접근할 수 있는 방법을 제공합니다. 존재하지 않는 키에 접근할 때 out_of_range 예외를 발생시키므로, 잘못된 키 접근으로 인한 예기치 않은 동작을 방지하고 싶다면 operator[] 대신 at()을 사용하는 것이 좋습니다.