std::flat_set<Key,Compare,KeyContainer>::insert
Min standard notice:
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
pos: iterator to the position before which the new element will be insertedvalue: element value to insertfirst, last: range of elements to insertilist: initializer list to insert the values fromx: a value of any type that can be transparently compared with a keys: a disambiguation tag indicating that the input sequence is sorted (with respect to compare) and contains only unique elements
# 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";
}