이 글에서는 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)를 수행합니다.