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

C++ STL multimap::emplace_hint() 함수 완벽 가이드

이 글에서는 C++ STL의 multimap::emplace_hint() 함수의 동작 방식, 문법, 그리고 실제 사용 예제까지 자세히 살펴보겠습니다.

C++ STL에서 Multimap이란?

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

multimap::emplace_hint()란?

emplace_hint() 함수는 C++ STL의 내장 함수로, <map> 헤더 파일에 정의되어 있습니다. 이 함수는 지정된 위치 정보를 활용하여 multimap 컨테이너에 새로운 요소를 삽입합니다.

호출 시 위치를 나타내는 인수가 함께 전달되는데, 이 위치는 단순한 '힌트(hint)' 역할을 합니다. 즉, 실제 삽입 위치가 힌트와 다르더라도 오류 없이 적절한 위치에 삽입되지만, 힌트가 정확하다면 삽입 성능이 향상될 수 있습니다.

emplace_hint()는 emplace() 함수와 유사하지만, 삽입할 위치 힌트를 추가로 제공한다는 점이 다릅니다. 또한 이 함수를 호출하면 컨테이너의 크기가 1 증가합니다.

문법(Syntax)

multimap_name.emplace_hint(iterator pos, Args& val);

매개변수(Parameters)

이 함수는 다음과 같은 매개변수를 받습니다.

  • pos − 삽입 위치 힌트를 지정하는 데 사용되는 반복자(iterator) 타입의 인수입니다.

  • val − 컨테이너에 삽입하고자 하는 요소입니다.

반환값(Return Value)

이 함수는 새 요소가 삽입된 위치를 가리키는 반복자(iterator)를 반환합니다.

입력 예시 

std::multimap<char, int> odd, eve;
odd.insert({'a', 1});
odd.insert({'b', 3});
odd.insert({'c', 5});
odd.emplace_hint(odd.end(), {'d', 7});

출력 결과

Odd: a:1 b:3 c:5 d:7

예제 코드

#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(), 3, 30);
    mul.emplace_hint(mul.begin(), 1, 40);
    mul.emplace_hint(mul.begin(), 4, 50);
    mul.emplace_hint(mul.begin(), 5, 60);
    cout << "\nmultimap의 요소들 : \n";
    cout << "KEY\tELEMENT\n";
    for (auto i = mul.begin(); i!= mul.end(); i++){
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

multimap의 요소들 :
KEY ELEMENT
1 40
1 10
2 20
3 30
4 50
5 60

출력 결과에서 확인할 수 있듯이, 같은 키 1에 대해 두 개의 서로 다른 값(10과 40)이 공존하는 것을 볼 수 있습니다. 이것이 바로 multimap이 중복 키를 허용한다는 점을 보여주는 핵심 특징입니다.