이 글에서는 C++ STL에서 multimap::key_comp() 함수의 동작 원리, 문법, 그리고 실전 예제까지 자세히 살펴봅니다.
C++ STL에서 멀티맵(Multimap)이란?
멀티맵은 맵(map) 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 값(value)의 조합으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있습니다. 일반적인 map과 달리, 멀티맵에서는 동일한 키를 가진 여러 요소가 존재할 수 있다는 점이 특징입니다. 또한 데이터는 내부적으로 항상 연관된 키를 기준으로 자동 정렬되어 유지됩니다.
multimap::key_comp()란 무엇인가?
multimap::key_comp()는 <map> 헤더 파일에 포함된 함수로, 키 비교 객체(key comparison object)의 복사본을 반환합니다. 기본 비교 객체는 less(<) 객체로, '보다 작음' 연산자와 동일하게 동작합니다.
이 객체는 멀티맵 컨테이너 내부에서 요소들의 키 순서를 검사하는 데 활용됩니다. 함수 호출 시 두 개의 인자를 전달하면 해당 키들을 비교하여, 첫 번째 요소가 더 작아 두 번째 요소보다 앞에 위치해야 하는 경우 true를, 그렇지 않은 경우 false를 반환합니다.
문법(Sytax)
Key_compare.key_comp();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환 값
키를 비교하는 데 사용되는 비교 객체(comparison object)를 반환합니다.
기본 사용 예시
입력
multimap<char, int> newmap;
multimap<char, int> :: key_compare cmp = newmap.key_comp();
newmap.insert(make_pair('A', 1));
newmap.insert(make_pair('B', 2));
newmap.insert(make_pair('C', 3));
출력
A= 1 B= 2 C= 3
실전 예제 코드
#include <iostream>
#include <map>
using namespace std;
int main(){
multimap<int, char> mul;
multimap<int, char>::key_compare cmp = mul.key_comp();
// 주어진 키에 요소 삽입
mul.insert(make_pair(0, 'A'));
mul.insert(make_pair(1, 'B'));
mul.insert(make_pair(2, 'C'));
mul.insert(make_pair(3, 'D'));
// 컨테이너에서 가장 큰 키 값
int a = mul.rbegin()->first;
multimap<int, char>::iterator it = mul.begin();
cout << "주어진 키의 요소들 : " << '\n';
do {
cout << it->first << " = " << it->second << '\n';
} while (cmp((*it++).first, a));
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
주어진 키의 요소들 : 0 = A 1 = B 2 = C 3 = D
코드 설명
mul.rbegin()->first를 통해 컨테이너에서 가장 큰 키 값(3)을 구한 뒤, 반복자를 시작 위치로 설정합니다. 이후 do-while 루프에서 cmp() 함수가 현재 키와 최대 키를 비교하여, 현재 키가 최대 키보다 작은 동안(true인 동안) 계속해서 각 요소를 출력합니다. 이처럼 key_comp()를 활용하면 컨테이너의 정렬 기준과 동일한 방식으로 직접 키를 비교할 수 있습니다.