이 글에서는 C++ STL의 map::emplace_hint() 함수에 대해 동작 방식, 구문, 그리고 실제 예제를 통해 자세히 살펴보겠습니다.
C++ STL에서 맵(Map)이란?
맵(map)은 연관 컨테이너(associative container)로, 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 순서대로 저장할 수 있게 해줍니다. 맵 컨테이너 내부에서 데이터는 항상 연관된 키를 기준으로 자동 정렬되며, 각 값은 고유한 키를 통해서만 접근할 수 있습니다.
map::emplace_hint()란?
map::emplace_hint()는 <map> 헤더 파일에 포함된 함수로, 힌트(hint) 정보를 활용하여 맵 컨테이너에 새 요소를 생성하고 삽입합니다.
emplace_hint()는 삽입하려는 요소의 키가 고유한 경우에만 새 요소를 삽입합니다. 즉, 동일한 키를 가진 요소가 이미 컨테이너에 존재하지 않을 때만 삽입이 수행됩니다.
구문
map_name.emplace_hint(iterator it, Args&& args);
매개변수
이 함수는 다음과 같은 매개변수를 받습니다.
it − 삽입될 요소의 위치를 나타내는 힌트 역할을 하는 반복자(iterator)입니다.
args − 위치 "it"에 배치(emplace)하려는 인수 또는 값입니다.
반환 값
삽입이 성공하면 함수는 새로 삽입된 요소를 가리키는 반복자를 반환합니다. 삽입이 실패하는 경우, 즉 동일한 키를 가진 요소가 이미 존재하면 해당 기존 요소를 가리키는 반복자를 반환합니다.
예제
입력
map<char, int> newmap; emplace_hint(newmap.end(), 'a', 1);
출력
a
전체 코드 예제
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.emplace_hint(TP_Map.begin(), 4, 50);
TP_Map.emplace_hint(TP_Map.begin(), 2, 30);
TP_Map.emplace_hint(TP_Map.begin(), 1, 10);
cout<<"TP Map is : \n";
cout << "MAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++)
cout << i->first << "\t" << i->second << endl;
return 0;
}
출력 결과
TP Map is: MAP_KEY MAP_ELEMENT 1 10 2 30 4 50
위 예제에서는 힌트로 begin() 반복자를 전달했지만, 맵은 항상 키를 기준으로 자동 정렬되기 때문에 최종 출력 결과는 키의 오름차순(1, 2, 4)으로 정렬되어 있습니다. 힌트가 실제 삽입 위치와 가까우면 삽입 성능이 향상될 수 있으며, 힌트가 부정확하더라도 프로그램의 정확성에는 영향을 주지 않습니다.