이 글에서는 C++ STL의 map::upper_bound() 함수가 어떻게 동작하는지, 그리고 문법과 실제 활용 예제를 통해 자세히 알아보겠습니다.
C++ STL에서 맵(Map)이란?
맵은 연관 컨테이너(associative container)의 일종으로, 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 순서에 따라 저장합니다. 맵 컨테이너 내부의 데이터는 항상 키를 기준으로 자동 정렬되며, 저장된 값은 각각의 고유한 키를 통해서만 접근할 수 있습니다.
map::upper_bound() 함수란?
map::upper_bound()는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. 이 함수는 맵 컨테이너에서 인자로 전달된 키 k보다 큰 값을 가진 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다. 즉, 키 k 바로 '다음'에 위치하는 요소를 찾을 때 유용하게 사용됩니다.
문법(Syntax)
Map_name.upper_bound(key& k);
매개변수(Parameter)
이 함수는 단 하나의 매개변수만 받습니다.
- k − 검색하고자 하는 키입니다.
반환값(Return Value)
함수는 키 k 다음에 위치한다고 간주되는 요소, 즉 k보다 큰 첫 번째 키를 가진 요소를 가리키는 반복자를 반환합니다.
예제 1: 기본 사용법
입력
map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap['c'] = 3;
newmap.upper_bound('b');출력
c : 3
위 예제에서 키 'b'의 상한(upper bound)은 'b'보다 큰 첫 번째 키인 'c'이므로, 해당 요소인 c : 3이 반환됩니다.
예제 2: 전체 코드 구현
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.insert({5, 50});
TP_Map.insert({2, 30});
TP_Map.insert({1, 10});
TP_Map.insert({4, 70});
cout<<"\nTP Map is : \n";
cout << "MAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.rbegin(); i!= TP_Map.rend(); i++) {
cout << i->first << "\t" << i->second << endl;
}
auto i = TP_Map.upper_bound(2);
cout << "The upper bound of key 2 is ";
cout << i->first << " " << i->second << endl;
auto i_1 = TP_Map.upper_bound(3);
cout << "The upper bound of key 3 is ";
cout << i_1->first << " " << i_1->second << endl;
return 0;
}출력
TP Map is: MAP_KEY MAP_ELEMENT 5 50 4 70 2 30 1 10 The upper bound of key 2 is 4 :70 The upper bound of key 3 is 4 :70
결과 분석
맵에는 키 1, 2, 4, 5가 저장되어 있습니다. 키 2의 upper_bound를 조회하면 2보다 큰 첫 번째 키인 4가 반환되고, 키 3의 경우 맵에 존재하지 않지만 3보다 큰 첫 번째 키 역시 4이므로 동일한 결과가 출력됩니다. 이처럼 upper_bound()는 해당 키가 맵에 존재하지 않더라도, 그보다 큰 첫 번째 키를 가진 요소를 정확히 찾아줍니다.