이 글에서는 C++ STL에서 제공하는 map::key_comp() 함수의 동작 원리, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.
C++ STL에서 Map이란?
Map은 연관 컨테이너(associative container)로, 키(key)와 매핑된 값(mapped value)의 쌍으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있게 해줍니다. Map 컨테이너 내부의 데이터는 항상 키를 기준으로 자동 정렬되며, 각 요소는 고유한 키를 통해 접근할 수 있습니다.
map::key_comp()란 무엇인가?
map::key_comp() 함수는 <map> 헤더 파일에 포함되어 있는 멤버 함수입니다. 이 함수는 키 비교 객체(key comparison object)의 복사본을 반환하며, 기본적으로 less than(<) 연산자와 동일하게 동작하는 객체를 반환합니다.
반환된 비교 객체는 map 컨테이너 내 요소들의 키 순서를 검사하는 데 사용됩니다. 두 개의 인자를 받아 키를 비교한 후, 첫 번째 요소가 두 번째 요소보다 작아 앞에 위치해야 하면 true를, 그렇지 않으면 false를 반환합니다.
문법(Syntax)
Key_compare.key_comp();
매개변수(Parameters)
이 함수는 어떠한 매개변수도 받지 않습니다.
반환 값(Return Value)
키를 비교하는 데 사용되는 비교 객체(comparison object)를 반환합니다.
예제
입력
map<char, int> newmap; map<char, int> :: key_compare cmp = newmap.key_comp(); newmap['a'] = 1; newmap['b'] = 2; newmap['c'] = 3;
출력
a = 1 b = 2 c = 3
예제 1: int 타입 키 사용
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, char> TP;
map<int, char>::key_compare cmp = TP.key_comp();
// 요소 삽입
TP[0] = 'a';
TP[1] = 'b';
TP[2] = 'c';
TP[3] = 'd';
cout << "맵에 저장된 요소들 : \n";
int val = TP.rbegin()->first;
map<int, char>::iterator i = TP.begin();
do {
cout << i->first << " : " << i->second << '\n';
} while (cmp((*i++).first, val));
return 0;
}출력 결과
맵에 저장된 요소들: 0 : a 1 : b 2 : c 3 : d
위 예제에서는 key_comp()로 얻은 비교 객체 cmp를 활용해, 현재 요소의 키가 맵의 마지막 키(rbegin()->first)보다 작은 동안 반복문을 계속 수행합니다. 덕분에 map에 저장된 모든 요소를 키 순서대로 출력할 수 있습니다.
예제 2: char 타입 키 사용
#include <bits/stdc++.h>
using namespace std;
int main() {
map<char, int> TP;
map<char, int>::key_compare cmp = TP.key_comp();
// 요소 삽입
TP['a'] = 0;
TP['b'] = 1;
TP['c'] = 3;
TP['d'] = 2;
cout << "맵에 저장된 요소들 : \n";
char val = TP.rbegin()->first;
map<char, int>::iterator i = TP.begin();
do {
cout << i->first << " : " << i->second << '\n';
} while (cmp((*i++).first, val));
return 0;
}출력 결과
맵에 저장된 요소들: a : 0 b : 1 c : 3 d : 2
두 번째 예제는 char 타입의 키를 사용한 경우입니다. 문자 역시 내부적으로 ASCII 코드 값을 기준으로 비교되기 때문에, 'a'부터 'd'까지 알파벳 순서대로 정렬되어 출력되는 것을 확인할 수 있습니다.
정리
map::key_comp()는 map 컨테이너의 키 정렬 기준을 직접 확인하고 활용할 수 있게 해주는 유용한 함수입니다. 주로 반복문과 함께 사용하여 특정 키 범위까지만 순회하거나, 사용자 정의 정렬 기준이 적용된 map에서 비교 로직을 재사용할 때 유용하게 쓰입니다.