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

C++ STL multimap::cbegin()과 multimap::cend() 완벽 가이드

이 글에서는 C++ STL에서 multimap::cbegin()과 multimap::cend() 함수의 동작 원리, 문법, 그리고 실제 사용 예제를 자세히 알아보겠습니다.

C++ STL에서 multimap이란?

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

multimap::cbegin()이란?

multimap::cbegin() 함수는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. cbegin()은 'constant begin'을 의미하며, multimap 컨테이너의 첫 번째 요소를 가리키는 상수 반복자(constant iterator)를 반환합니다. 반환된 반복자는 상수 반복자이므로 이를 사용해 컨테이너의 내용을 수정할 수 없습니다. 대신 반복자를 증가·감소시키면서 컨테이너의 요소들을 안전하게 순회할 수 있습니다.

문법

multi.cbegin();

매개변수

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

반환값

해당 multimap 컨테이너의 첫 번째 요소를 가리키는 상수 반복자를 반환합니다.

입력 예시

multimap<char, int> newmap;
newmap.insert(make_pair('a', 1));
newmap.insert(make_pair('b', 2));
newmap.insert(make_pair('c', 3));
auto it = newmap.cbegin();

출력 결과 −

a = 1

예제 코드

#include <bits/stdc++.h>
using namespace std;
int main(){
    // 컨테이너 생성
    multimap<int, int> mul;
    // emplace_hint를 이용한 요소 삽입
    mul.emplace_hint(mul.begin(), 1, 10);
    mul.emplace_hint(mul.begin(), 2, 20);
    mul.emplace_hint(mul.begin(), 2, 30);
    mul.emplace_hint(mul.begin(), 1, 40);
    mul.emplace_hint(mul.begin(), 1, 50);
    mul.emplace_hint(mul.begin(), 5, 60);
    auto it = mul.cbegin();
    cout << "multimap의 첫 번째 요소: ";
    cout << "{" << it->first << ", " << it->second << "}\n";
    cout << "\nmultimap의 전체 요소 : \n";
    cout << "키\t값\n";
    for (auto i = mul.cbegin(); i != mul.cend(); i++){
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력 결과

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

multimap의 첫 번째 요소: {1, 50}

multimap의 전체 요소 :
키      값
1      50
1      40
1      10
2      30
2      20
5      60

multimap::cend()란?

multimap::cend() 함수 역시 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. cend()는 'constant end'를 의미하며, 해당 multimap 컨테이너의 마지막 요소 바로 다음 위치(past-the-last element)를 가리키는 상수 반복자를 반환합니다.

반환되는 반복자는 상수 반복자이기 때문에 컨테이너의 내용을 수정하는 데 사용할 수 없으며, 오직 요소를 읽고 순회하는 용도로만 활용됩니다.

multimap::cbegin()과 multimap::cend()를 함께 사용하면 범위의 시작과 끝을 지정하여 컨테이너 전체를 손쉽게 순회할 수 있습니다.

문법

multi.cend();

매개변수

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

반환값

해당 multimap 컨테이너의 마지막 요소 다음 위치를 가리키는 상수 반복자를 반환합니다.

입력 예시 −

multimap<char, int> newmap;
newmap.insert(make_pair('a', 1));
newmap.insert(make_pair('b', 2));
newmap.insert(make_pair('c', 3));
newmap.cend();

출력 결과 −

error

cend()가 가리키는 위치에는 실제 유효한 요소가 존재하지 않으므로, 이 반복자를 역참조하려 하면 오류가 발생합니다. 따라서 cend()는 반드시 순회의 종료 조건으로만 사용해야 합니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
int main(){
    // 컨테이너 생성
    multimap<int, int> mul;
    // emplace_hint를 이용한 요소 삽입
    mul.emplace_hint(mul.begin(), 1, 10);
    mul.emplace_hint(mul.begin(), 2, 20);
    mul.emplace_hint(mul.begin(), 2, 30);
    mul.emplace_hint(mul.begin(), 1, 40);
    mul.emplace_hint(mul.begin(), 1, 50);
    mul.emplace_hint(mul.begin(), 5, 60);
    cout << "\nmultimap의 전체 요소 : \n";
    cout << "키\t값\n";
    for (auto i = mul.cbegin(); i != mul.cend(); i++){
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력 결과

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

multimap의 전체 요소 :
키      값
1      50
1      40
1      10
2      30
2      20
5      60