flat_set_insert

flat_set_insert (std::flat_set::insert — 원소 삽입)

std::flat_set에 원소를 삽입하는 멤버 함수예요. 값/이동 값, 힌트 위치, 이터레이터 범위, std::sorted_unique_t 태그, 초기화 목록 등 다양한 형태로 삽입을 지원해요. 중복 키는 삽입하지 않아요.

출처: cppreference

본문

주요 시그니처는 다음과 같아요 (모두 since C++23).

std::pair<iterator, bool> insert( const value_type& value );           // (1)
std::pair<iterator, bool> insert( value_type&& value );                // (2)
iterator insert( const_iterator pos, const value_type& value );        // (3)
iterator insert( const_iterator pos, value_type&& value );             // (4)
template< class K >
iterator insert( const_iterator pos, K&& x );                          // (5)
template< class InputIt >
void insert( InputIt first, InputIt last );                            // (6)
template< class K >
std::pair<iterator, bool> insert( K&& x );                             // (7)
template< class InputIt >
void insert( std::sorted_unique_t, InputIt first, InputIt last );      // (8)
void insert( std::initializer_list<key_type> ilist );                  // (9)
  • (1) value를 삽입해요. 이미 같은 키가 있으면 삽입하지 않아요.
  • (3,4,5) pos 바로 앞에 최대한 가깝게 삽입해요 (힌트 삽입). 중복 키는 삽입하지 않아요.
  • (6) 범위 [first, last)의 원소들을 삽입해요.
  • (8) std::sorted_unique_t 태그를 쓰면 입력이 이미 정렬되어 있고 중복이 없다고 가정해요.
  • (9) 초기화 목록 ilist의 원소들을 삽입해요.

삽입 후 내부 컨테이너는 키 순서로 정렬된 상태를 유지해요.

반환값

  • (1,2,7) {삽입 성공 여부, 성공 시 삽입된 원소 / 실패 시 기존 원소의 이터레이터} 쌍.
  • (3,4,5) 삽입된(또는 삽입을 막은) 원소를 가리키는 이터레이터.
  • (6,8,9) void.

복잡도

내부 컨테이너 크기에 선형(linear) 이상. 보통 범위 삽입은 N'(새로 삽입된 개수) + N·log(N + N') 형태예요.

예제

#include <flat_set>
#include <iostream>
int main()
{
    std::flat_set<int> s;
    auto [it, ok] = s.insert(3);
    auto [it2, ok2] = s.insert(3);  // 이미 있음
    std::cout << ok << ' ' << ok2 << '\n';  // 1 0
}

더 알아보기 (Learn more)

cppreference