이 글에서는 C++ STL에서 multimap::emplace() 함수의 작동 방식, 문법, 그리고 실제 활용 예제를 자세히 살펴보겠습니다.
C++ STL에서 Multimap이란?
Multimap은 map 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있습니다. 일반 map과 달리 multimap에서는 동일한 키를 가진 여러 개의 요소가 존재할 수 있으며, 데이터는 내부적으로 항상 키를 기준으로 정렬되어 관리됩니다.
multimap::emplace()란?
multimap::emplace() 함수는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. emplace()는 multimap 컨테이너에 새로운 요소를 생성하고 삽입하는 데 사용되며, 호출 시 컨테이너의 크기가 1만큼 증가합니다.
이 함수는 insert 함수와 유사하지만 중요한 차이점이 있습니다. insert는 기존 객체를 복사(copy)하거나 이동(move)하여 컨테이너에 넣는 반면, emplace는 전달된 인자를 바탕으로 컨테이너 내부에서 직접 객체를 생성하기 때문에 불필요한 복사 비용을 줄일 수 있다는 장점이 있습니다.
문법
multimap_name.emplace(Args&&... val);
매개변수
이 함수는 다음 매개변수를 받습니다.
val − 삽입하고자 하는 요소의 키와 값입니다. emplace는 별도의 pair 객체 없이 생성자 인자를 그대로 전달받아 내부에서 요소를 구성합니다.
반환값
새로 삽입된 요소의 위치를 가리키는 반복자(iterator)를 반환합니다.
입력 예시
std::multimap<char, int> odd;
odd.insert({'a', 1});
odd.emplace('b', 3);출력
Odd: a:1 b:3
예제 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
// 컨테이너 생성
multimap<int, int> mul;
// emplace를 사용한 요소 삽입
mul.emplace(1, 10);
mul.emplace(4, 20);
mul.emplace(5, 30);
mul.emplace(2, 40);
mul.emplace(3, 50);
mul.emplace(4, 60);
cout << "\nElements in multimap is : \n";
cout << "KEY\tELEMENT\n";
for (auto i = mul.begin(); i != mul.end(); i++){
cout << i->first << "\t" << i->second << endl;
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Elements in multimap is : KEY ELEMENT 1 10 2 40 3 50 4 20 4 60 5 30
출력 결과를 보면 동일한 키 4에 대해 두 개의 값(20, 60)이 모두 저장되어 있으며, 전체 요소가 키를 기준으로 오름차순으로 정렬되어 있는 것을 확인할 수 있습니다. 이것이 multimap이 map과 다른 핵심 특징으로, 하나의 키에 여러 값을 허용한다는 점을 잘 보여줍니다.