std::flat_set<Key,Compare,KeyContainer>::insert

Inserts element(s) into the container, if the container does not already contain an element with an equivalent key.

# Declarations

std::pair<iterator, bool> insert( const value_type& value );

(since C++23)

std::pair<iterator, bool> insert( value_type&& value );

(since C++23)

iterator insert( const_iterator pos, const value_type& value );

(since C++23)

iterator insert( const_iterator pos, value_type&& value );

(since C++23)

template< class K >
iterator insert( const_iterator pos, K&& x );

(since C++23)

template< class InputIt >
void insert( InputIt first, InputIt last );

(since C++23)

template< class K >
std::pair<iterator, bool> insert( K&& x );

(since C++23)

template< class InputIt >
void insert( std::sorted_unique_t, InputIt first, InputIt last );

(since C++23)

void insert( std::initializer_list<key_type> ilist );

(since C++23)

void insert( std::sorted_unique_t s, std::initializer_list<key_type> ilist );

(since C++23)

# Parameters

# Notes

The hinted insert (3-5) does not return a boolean in order to be signature-compatible with positional insert on sequential containers, such as std::vector::insert. This makes it possible to create generic inserters such as std::inserter. One way to check success of a hinted insert is to compare size() before and after.

# Example

#include <cassert>
#include <flat_set>
#include <iostream>
 
int main()
{
    std::flat_set<int> set;
 
    auto result_1 = set.insert(3);
    assert(result_1.first != set.end()); // it is a valid iterator
    assert(*result_1.first == 3);
    if (result_1.second)
        std::cout << "insert done\n";
 
    auto result_2 = set.insert(3);
    assert(result_2.first == result_1.first); // the same iterator
    assert(*result_2.first == 3);
    if (!result_2.second)
        std::cout << "no insertion\n";
}

# See also