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

C++ STL map::value_comp() 함수 완벽 가이드 – 개념, 문법, 예제

이 글에서는 C++ STL의 map::value_comp() 함수가 어떻게 동작하는지, 문법은 어떻게 되는지, 그리고 실제 예제를 통해 어떻게 활용하는지 자세히 알아보겠습니다.

C++ STL에서 맵(Map)이란?

맵(map)은 연관 컨테이너(associative container)의 일종으로, 키(key)와 매핑된 값(mapped value)의 조합으로 구성된 요소들을 특정 순서에 따라 저장합니다. 맵 컨테이너 내부의 데이터는 항상 연관된 키를 기준으로 자동 정렬되며, 각 값은 고유한 키를 통해서만 접근할 수 있습니다.

map::value_comp()란 무엇인가?

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

쉽게 말해 value_comp()는 함수 포인터 또는 함수 객체(function object)의 일종으로, 같은 타입의 두 값을 비교하여 첫 번째 요소가 두 번째 요소보다 작으면 true를, 그렇지 않으면 false를 반환합니다. 참고로 key_comp()가 키만 비교하는 것과 달리, value_comp()는 키와 값으로 이루어진 pair 전체를 비교 대상으로 삼는다는 점이 다릅니다.

문법(Syntax)

Map_name.value_comp();

매개변수(Parameter)

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

반환 값(Return Value)

맵 컨테이너와 연관된 비교 객체(map::value_compare 타입)를 반환합니다.

예제 1

입력

map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap['c'] = 3;

auto comp = newmap.value_comp();
auto last = *newmap.rbegin();

for (auto it = newmap.begin(); comp(*it, last); ++it) {
    cout << it->second << endl;
}

출력

1
2
3

위 예제에서는 value_comp()가 반환한 비교 객체를 사용해 현재 요소가 마지막 요소보다 작은 동안 반복하며 값을 출력합니다. 마지막 요소에 도달하면 비교 결과가 false가 되어 반복이 종료됩니다.

예제 2

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

int main() {
    map<char, int> TP = {
        { 'a', 10 },
        { 'b', 20 },
        { 'c', 30 },
        { 'd', 40 },
        { 'e', 50 },
    };
    auto temp = *TP.rbegin();   // 마지막 요소 ('e', 50)
    auto i = TP.begin();
    cout << "Elements in map are : \n";
    do {
        cout << i->first << " = " << i->second << endl;
    } while (TP.value_comp()(*i++, temp));
    return 0;
}

출력

Elements in map are :
a = 10
b = 20
c = 30
d = 40
e = 50

동작 원리 정리

위 코드에서 TP.rbegin()은 맵의 마지막 요소인 ('e', 50)을 가리킵니다. do-while 루프는 현재 요소가 마지막 요소보다 작은 동안, 즉 value_comp()가 true를 반환하는 동안 계속해서 요소를 출력합니다. ('e', 50)에 도달하면 자기 자신과의 비교가 되므로 false가 반환되고 루프가 종료됩니다. 이처럼 value_comp()는 맵의 정렬 기준을 그대로 활용하여 요소를 순회하거나 비교할 때 유용하게 사용할 수 있습니다.