Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL multimap::value_comp() 함수 완벽 가이드

이 글에서는 C++ STL에서 제공하는 multimap::value_comp() 함수의 동작 원리, 사용 문법, 그리고 실제 예제까지 자세히 살펴보겠습니다.

C++ STL에서 Multimap이란?

Multimap은 map 컨테이너와 유사한 연관 컨테이너(Associative Container)입니다. 키(key)와 매핑된 값(mapped value)으로 구성된 요소들을 특정 순서에 따라 저장할 수 있습니다. 일반적인 map과의 가장 큰 차이점은, multimap에는 동일한 키를 가진 여러 요소가 공존할 수 있다는 점입니다. 또한 내부 데이터는 항상 연관된 키를 기준으로 자동 정렬되어 관리됩니다.

multimap::value_comp()란?

multimap::value_comp()는 C++ STL에 내장된 함수로, <map> 헤더 파일에 선언되어 있습니다. 이 함수는 multimap 컨테이너가 내부적으로 요소를 비교할 때 사용하는 비교 객체(comparison object)의 복사본을 반환합니다. 기본값으로 설정되는 이 객체는 '작다(less-than)' 연산자와 동일한 방식으로 동작합니다.

쉽게 말해 value_comp()는 함수 포인터 또는 함수 객체(function object) 형태로, 같은 타입의 두 값을 비교하여 첫 번째 요소가 두 번째 요소보다 작으면 true, 그렇지 않으면 false를 반환합니다.

문법(Syntax)

multi_name.value_comp();

매개변수

이 함수는 별도의 매개변수를 받지 않습니다.

반환 값

해당 multimap 컨테이너의 비교 객체(comparison object)를 반환합니다.

예제 코드

#include <iostream>
#include <map>
using namespace std;

int main(){
    multimap<int, char> mul;
    // 주어진 키에 요소 삽입
    mul.insert(make_pair(0, 'A'));
    mul.insert(make_pair(1, 'B'));
    mul.insert(make_pair(2, 'C'));
    mul.insert(make_pair(3, 'D'));

    pair<int, char> temp = *mul.rbegin();
    multimap<int, char>::iterator it = mul.begin();

    cout << "저장된 요소 목록 : " << '\n';
    do {
        cout << (*it).first << " = " << (*it).second << '\n';
    } while (mul.value_comp()(*it++, temp));

    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

저장된 요소 목록 :
0 = A
1 = B
2 = C
3 = D

동작 방식 설명

위 예제에서 rbegin()은 컨테이너의 마지막 요소를 가리키며, 반복자 it은 첫 번째 요소부터 시작합니다. do-while 루프 안에서 value_comp()가 반환한 비교 객체가 현재 요소의 키와 마지막 요소의 키를 계속 비교하고, 현재 키가 마지막 키보다 작은 동안에만 루프가 반복됩니다. 이러한 원리 덕분에 multimap에 저장된 모든 요소가 키 순서대로 정렬되어 출력되는 것을 확인할 수 있습니다.