이 글에서는 C++ STL의 map::find() 함수가 어떻게 동작하는지, 그 문법과 다양한 예제를 통해 자세히 알아보겠습니다.
C++ STL에서 Map이란?
Map은 연관 컨테이너(associative container)로, 키(key)와 값(value)이 한 쌍을 이루는 요소들을 특정 순서에 따라 저장할 수 있게 해줍니다. Map 컨테이너 내부에서 데이터는 항상 키를 기준으로 자동 정렬되며, 각 요소는 고유한 키를 통해서만 접근할 수 있습니다.
map::find()란 무엇인가?
map::find()는 <map> 헤더 파일에 포함된 함수로, 검색하고자 하는 특정 키에 해당하는 요소를 가리키는 반복자(iterator)를 반환합니다. 만약 해당 키가 맵에 존재하지 않으면 end() 반복자를 반환합니다.
문법
map_name.find(key_value k);
매개변수
이 함수는 다음 매개변수를 하나 받습니다.
k: Map 컨테이너에서 검색하려는 키 값입니다.
반환 값
키 k와 연결된 요소를 가리키는 반복자를 반환합니다. 키가 존재하지 않을 경우 end() 반복자를 반환합니다.
예제
입력
map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap.find('b');출력
2
예제 1: find()로 특정 키 검색하기
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.insert({3, 50});
TP_Map.insert({2, 30});
TP_Map.insert({1, 10});
TP_Map.insert({4, 70});
cout<<"TP Map is : \n";
cout << "MAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
cout << i->first << "\t" << i->second << endl;
}
//특정 위치의 맵 값을 찾기
auto var = TP_Map.find(1);
cout<<"Found element at position "<<var->first<<" is : "<<var->second;
auto var_1 = TP_Map.find(2);
cout<<"\nFound element at position "<<var_1->first<<" is : "<<var_1->second;
return 0;
}출력
TP Map is: MAP_KEY MAP_ELEMENT 1 10 2 30 3 50 4 70 Found element at position 1 is : 10 Found element at position 2 is : 30
위 예제에서 TP_Map.find(1)은 키 1에 해당하는 요소를 가리키는 반복자를 반환하고, var->first로 키를, var->second로 값을 출력할 수 있습니다.
예제 2: find() 결과부터 끝까지 순회하기
find()는 반복자를 반환하므로, 이를 활용해 특정 위치부터 맵의 끝까지 요소를 순회할 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.insert({3, 50});
TP_Map.insert({2, 30});
TP_Map.insert({1, 10});
TP_Map.insert({4, 70});
cout<<"TP Map is : \n";
cout << "MAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.find(2); i!= TP_Map.end(); i++) {
cout << i->first << "\t" << i->second << endl;
}
return 0;
}출력
TP Map is: MAP_KEY MAP_ELEMENT 2 30 3 50 4 70
이처럼 find()가 반환한 반복자를 루프의 시작점으로 사용하면, 키 2부터 마지막 요소까지 차례대로 출력되는 것을 확인할 수 있습니다.
마무리
map::find()는 C++ STL에서 맵 내 특정 키를 빠르게 검색할 때 유용한 함수입니다. 맵은 내부적으로 균형 이진 탐색 트리(레드-블랙 트리)로 구현되어 있어, find()의 시간 복잡도는 O(log n)입니다. 검색 실패 시 end()를 반환한다는 점만 기억하면 안전하게 활용할 수 있습니다.