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

C++ STL set 컨테이너의 emplace_hint() 함수 완벽 가이드

이 글에서는 C++ STL의 set::emplace_hint() 함수에 대해 개념, 구문, 동작 방식, 그리고 반환값까지 자세히 살펴보겠습니다.

C++ STL에서 set란 무엇인가?

C++ STL에서 set은 고유한(unique) 요소들을 정렬된 순서로 저장하는 컨테이너입니다. 각 요소의 값 자체가 곧 식별자 역할을 하기 때문에 중복된 값을 가질 수 없습니다. 한 번 set에 삽입된 값은 이후 수정할 수 없지만, 요소를 추가하거나 제거하는 것은 언제든 가능합니다. 내부적으로 set은 이진 탐색 트리(binary search tree) 구조로 구현되어 있어 빠른 검색 성능을 제공합니다.

set::emplace_hint()란?

emplace_hint()는 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다. 이 함수는 위치 힌트(hint)와 함께 새 요소를 set 컨테이너에 삽입합니다. 삽입하려는 값과 동일한 값이 컨테이너에 존재하지 않을 경우에만 실제로 삽입이 이루어집니다. 함수는 힌트로 전달된 위치부터 탐색을 시작하여 요소가 삽입될 최적의 위치를 찾아냅니다.

구문

Set1.emplace_hint(iterator position, const type_t& value);

매개변수

이 함수는 두 개의 매개변수를 받습니다. 하나는 힌트 위치이고, 다른 하나는 삽입할 요소입니다.

position − 탐색이 시작되는 힌트 위치입니다. 이 위치는 함수의 실행 속도를 높이기 위한 참고 사항일 뿐, 요소가 실제로 삽입될 위치를 강제로 지정하지 않습니다.

value − 실제로 삽입하고자 하는 값입니다.

반환값

삽입이 성공적으로 이루어지면, 새로 삽입된 요소를 가리키는 반복자(iterator)를 반환합니다.

예제 1: 기본 사용법

Input: set mySet;
mySet.emplace_hint(mySet.begin(), 0);
mySet.emplace_hint(i, 1);
mySet.emplace_hint(i, 2);
mySet.emplace_hint(i, 1);
Output: Elements are : 0 1 2

예제 2: 정수형 set 활용

#include <bits/stdc++.h>
using namespace std;
int main(){
   set<int> mySet;
   auto i = mySet.emplace_hint(mySet.begin(), 0);
   i = mySet.emplace_hint(i, 1);
   mySet.emplace_hint(i, 2);
   mySet.emplace_hint(i, 1);
   cout<<"elements are : ";
   for (auto i = mySet.begin(); i != mySet.end(); i++)
      cout << *i<< " ";
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다 −

Elements are : 0 1 2

위 예제에서 주목할 점은 마지막 줄에서 이미 존재하는 값 1을 다시 삽입하려 했지만, set은 중복을 허용하지 않으므로 최종 출력에는 나타나지 않는다는 것입니다.

예제 3: 문자열 set 활용

#include <iostream>
#include <set>
#include <string>
int main (){
   std::set<std::string> mySet;
   auto i = mySet.cbegin();
   mySet.emplace_hint (i,"best");
   i = mySet.emplace_hint (mySet.cend(),"point");
   i = mySet.emplace_hint (i,"is the");
   i = mySet.emplace_hint (i,"tutorials");
   std::cout<<"string is : ";
   for(const std::string& str: mySet)
      std::cout << ' ' << str;
   std::cout << '
';
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다 −

String is : best is the point tutorials

문자열 set의 경우에도 힌트 위치와 관계없이 요소들은 항상 정렬된 순서(사전순)로 유지됩니다. 힌트는 단지 삽입 연산의 효율성을 높이는 데 사용될 뿐입니다.