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

C++ STL multimap::operator= 완벽 정리: 대입 연산자의 동작 원리와 사용 예제


이 글에서는 C++ STL에서 multimap::operator=, 즉 대입 연산자('=')의 동작 방식, 문법, 그리고 실제 예제를 통해 자세히 알아보겠습니다.

C++ STL에서 Multimap이란?

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

multimap '=' 대입 연산자란?

multimap::operator=는 대입(복사) 연산자입니다. 이 연산자를 사용하면 한 컨테이너의 모든 요소를 다른 컨테이너로 복사할 수 있으며, 이때 복사를 받는 컨테이너의 기존 내용은 완전히 덮어써지고 사라집니다.

문법

multiMap_name1 = multimap_name2;

매개변수

'=' 연산자의 왼쪽에는 복사를 받을 멀티맵이, 오른쪽에는 복사할 원본 멀티맵이 위치합니다. 오른쪽 멀티맵의 전체 내용이 왼쪽 멀티맵으로 복사됩니다.

반환 값

이 연산자는 별도의 반환 값을 가지지 않습니다.

간단한 입력·출력 예시

입력

multimap<int, int> newmap, themap;
newmap.insert({1, 20});
newmap.insert({2, 30});
themap = newmap;

출력

themap = 1:20 2:30

예제

다음은 두 개의 multimap 객체를 생성하고, '=' 연산자를 사용해 한쪽의 내용을 다른 쪽으로 복사하는 전체 코드입니다.

#include<iostream>
#include<map>
using namespace std;
int main(){
    multimap<int,char> mul_1;
    multimap<int,char> mul_2;
    // 요소를 순회하기 위한 반복자 선언
    multimap<int,char>::iterator i;
    // multimap1에 요소 삽입
    mul_1.insert(make_pair(0,'a'));
    mul_1.insert(make_pair(1,'b'));
    mul_1.insert(make_pair(2,'c'));
    mul_1.insert(make_pair(3,'d'));
    // multimap2에 요소 삽입
    mul_2.insert(make_pair(4,'e'));
    mul_2.insert(make_pair(5,'f'));
    mul_2.insert(make_pair(6,'g'));
    // '=' 연산자 호출
    mul_1 = mul_2;
    // multimap1의 요소 출력
    cout<<"Elements in multimap1 are: "<<"\n";
    for(i = mul_1.begin(); i != mul_1.end(); i++) {
        cout<<(*i).first<<" "<<(*i).second<<"\n";
    }
    // multimap2의 요소 출력
    cout<<"\nElements in multimap2 are: "<<"\n";
    for(i = mul_2.begin(); i != mul_2.end(); i++) {
        cout<<(*i).first<<" "<<(*i).second<<"\n";
    }
}

실행 결과

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

Elements in multimap1 are:
4 e
5 f
6 g
Elements in multimap2 are:
4 e
5 f
6 g

실행 결과에서 확인할 수 있듯이, mul_1 = mul_2;가 실행된 후 multimap1의 기존 내용(0:a, 1:b, 2:c, 3:d)은 모두 삭제되고 multimap2의 내용(4:e, 5:f, 6:g)으로 완전히 대체됩니다. 이처럼 multimap의 '=' 연산자는 단순 참조 공유가 아닌 전체 요소의 깊은 복사(deep copy)를 수행합니다.