flat_multiset_insert
flat_multiset_insert (std::flat_multiset::insert — 원소 삽입)
std::flat_multiset에 원소를 삽입하는 멤버 함수예요. 값/이동 값, 힌트 위치, 이터레이터 범위, std::sorted_equivalent_t 태그, 초기화 목록 등 다양한 형태로 삽입을 지원해요. 남아 있는 동등한 원소들의 순서는 보존돼요.
출처: cppreference
본문
주요 시그니처는 다음과 같아요 (모두 since C++23).
iterator insert( const value_type& value ); // (1)
iterator 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 InputIt >
void insert( InputIt first, InputIt last ); // (5)
template< class InputIt >
void insert( std::sorted_equivalent_t, InputIt first, InputIt last ); // (6)
void insert( std::initializer_list<key_type> ilist ); // (7)
void insert( std::sorted_equivalent_t s, std::initializer_list<key_type> ilist ); // (8)
- (1)
value를 삽입해요. - (2)
value를 이동 삽입해요. - (3)
pos바로 앞 위치에 최대한 가깝게value를 삽입해요 (힌트 삽입). - (4)
pos바로 앞에 최대한 가깝게value를 이동 삽입해요. - (5) 범위
[first, last)의 원소들을 삽입해요. - (6,8)
std::sorted_equivalent_t태그를 쓰면 입력이 이미 정렬되어 같은 키가 뭉쳐 있다고 가정해요. - (7) 초기화 목록
ilist의 원소들을 삽입해요.
멀티셋이라서 이미 같은 키가 있어도 무조건 삽입돼요. 삽입 후 내부 컨테이너는 키 순서로 정렬된 상태를 유지해요.
반환값
단일 원소 오버로드는 삽입된 원소를 가리키는 이터레이터를 반환하고, 범위/초기화 목록 오버로드는 void예요.
복잡도
내부 컨테이너 크기에 선형(linear) 이상. 보통 범위 삽입은 N'(새로 삽입된 개수) + N·log(N + N') 형태예요.
예제
#include <flat_set>
#include <iostream>
int main()
{
std::flat_multiset<int> s;
s.insert(3);
s.insert({1, 2});
for (int x : s) std::cout << x << ' '; // 1 2 3
}