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

C++ STL multimap::emplace() 함수 완벽 정리: 개념, 문법, 예제

이 글에서는 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과 다른 핵심 특징으로, 하나의 키에 여러 값을 허용한다는 점을 잘 보여줍니다.