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

C++ STL 멀티맵(multimap)의 rend() 함수 완벽 정리

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

C++ STL에서 멀티맵(Multimap)이란?

멀티맵은 맵(map) 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있습니다. 일반적인 map과 달리, 멀티맵에서는 동일한 키를 가진 여러 요소가 존재할 수 있다는 점이 가장 큰 특징입니다. 내부적으로 데이터는 항상 키를 기준으로 정렬되어 유지됩니다.

multimap::rend()란 무엇인가?

multimap::rend()는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. 이름에서 알 수 있듯이 rend()는 'reverse end'를 의미하며, end() 함수의 역방향 버전입니다. 이 함수는 멀티맵 컨테이너의 첫 번째 요소 바로 앞 위치(역방향 끝)를 가리키는 역방향 반복자(reverse iterator)를 반환합니다.

문법(Syntax)

multiMap_name.rend();

매개변수(Parameter)

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

반환 값(Return Value)

이 함수는 멀티맵 컨테이너의 역방향 끝, 즉 첫 번째 요소 이전의 위치를 가리키는 역방향 반복자를 반환합니다. 주로 rbegin()과 함께 사용되어 컨테이너를 뒤에서부터 앞으로 순회할 때 순회 종료 조건으로 활용됩니다.

입력 예시

multimap<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap['c'] = 3;
newmap.rend();

출력

error

위 코드에서 오류가 발생하는 이유는 multimap은 operator[]를 지원하지 않기 때문입니다. 동일한 키에 여러 값을 저장할 수 있는 멀티맵의 특성상, 인덱스 연산자를 통한 직접 할당은 모호성을 유발하므로 컴파일 에러가 발생합니다. 따라서 멀티맵에는 반드시 insert() 함수를 사용해 요소를 추가해야 합니다.

실전 예제

#include <bits/stdc++.h>
using namespace std;
int main(){
    multimap<int, int> mul;
    //멀티맵에 요소 삽입
    mul.insert({ 1, 10 });
    mul.insert({ 2, 20 });
    mul.insert({ 3, 30 });
    mul.insert({ 4, 40 });
    mul.insert({ 5, 50 });
    //멀티맵 요소 출력
    cout << "\nElements in multimap is : \n";
    cout << "KEY\tELEMENT\n";
    for (auto it = mul.rbegin(); it != mul.rend(); ++it){
        cout << it->first << '\t' << it->second << '\n';
    }
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Elements in multimap is :
KEY ELEMENT
5 50
4 40
3 30
2 20
1 10

위 예제에서 볼 수 있듯이, rbegin()부터 rend()까지 역방향 반복자로 순회하면 멀티맵의 요소들이 키를 기준으로 내림차순으로 출력됩니다. 이처럼 rend()는 역방향 순회의 종료 지점을 명확하게 지정해 주는 핵심 함수입니다.