set_insert
set_insert (std::set::insert — 원소 삽입)
std::set에 원소를 삽입하는 멤버 함수예요. 값/이동 값, 힌트 위치, 범위, 초기화 목록, 노드 핸들 방식으로 삽입할 수 있어요. 중복 키는 삽입하지 않아요.
출처: cppreference
본문
주요 시그니처는 다음과 같아요.
std::pair<iterator, bool> insert( const value_type& value ); // (1)
std::pair<iterator, bool> insert( value_type&& value ); // (2) (since C++11)
iterator insert( const_iterator pos, const value_type& value );// (3)
iterator insert( const_iterator pos, value_type&& value ); // (4) (since C++11)
template< class InputIt >
void insert( InputIt first, InputIt last ); // (5)
void insert( std::initializer_list<value_type> ilist ); // (6) (since C++11)
std::pair<iterator, bool> insert( node_type&& nh ); // (7) (since C++17)
iterator insert( const_iterator pos, node_type&& nh ); // (8) (since C++17)
- (1,2)
value를 삽입해요. 이미 같은 키가 있으면 삽입하지 않아요. - (3,4)
pos바로 앞에 최대한 가깝게 힌트 삽입해요. - (5) 범위
[first, last)의 원소들을 삽입해요. - (6) 초기화 목록
ilist의 원소들을 삽입해요. - (7,8) 노드 핸들
nh에서 노드를 삽입해요. 틀린 비교자를 가진 컨테이너에서 온 노드여도 허용돼요.
반환값
- 단일 원소(1,2,7):
{원소의 이터레이터, 새로 삽입됐으면 true}쌍. - 힌트 오버로드(3,4,8): 원소의 이터레이터.
- 범위/초기화 목록(5,6):
void.
복잡도
로그(logarithmic)예요. 힌트 오버로드는 힌트가 적절하면 분할 상환 상수.
예제
#include <iostream>
#include <set>
int main()
{
std::set<int> s;
auto [it, ok] = s.insert(3);
auto [it2, ok2] = s.insert(3); // 이미 있음
std::cout << ok << ' ' << ok2 << '\n'; // 1 0
}