(C++17) | ||||
Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
Associative | ||||
Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
Adaptors | ||||
flat_set (C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
Views | ||||
(C++20) | ||||
(C++23) | ||||
Tables | ||||
Iterator invalidation | ||||
Member function table | ||||
Non-member function table |
Defined in header <flat_set> | ||
template< class Key, | (since C++23) | |
The flat set is acontainer adaptor that gives the functionality of an associative container that stores a sorted set of unique objects of typeKey
. Sorting is done using the key comparison functionCompare
.
The class templateflat_set
acts as a wrapper to the underlying sorted container passed as object of typeKeyContainer
.
Everywhere the standard library uses theCompare requirements, uniqueness is determined by using the equivalence relation. Informally, two objectsa andb are considered equivalent if neither compares less than the other:!comp(a, b)&&!comp(b, a).
std::flat_set
meets the requirements ofContainer,ReversibleContainer,optional container requirements, and all requirements ofAssociativeContainer (including logarithmic search complexity), except that:
A flat set supports mostAssociativeContainer's operations that use unique keys.
All member functions ofstd::flat_set areconstexpr: it is possible to create and usestd::flat_set objects in the evaluation of a constant expression.However, | (since C++26) |
Contents |
This section is incomplete |
Key | - | The type of the stored elements. The program is ill-formed ifKey is not the same type asKeyContainer::value_type . |
Compare | - | ACompare type providing a strict weak ordering. |
KeyContainer | - | The type of the underlyingSequenceContainer to store the elements. The iterators of such container should satisfyLegacyRandomAccessIterator or modelrandom_access_iterator .The standard containersstd::vector andstd::deque satisfy these requirements. |
Type | Definition |
container_type | Key Container [edit] |
key_type | Key [edit] |
value_type | Key [edit] |
key_compare | Compare [edit] |
value_compare | Compare [edit] |
reference | value_type&[edit] |
const_reference | const value_type&[edit] |
size_type | typename KeyContainer::size_type[edit] |
difference_type | typename KeyContainer::difference_type[edit] |
iterator | implementation-definedLegacyRandomAccessIterator,ConstexprIterator(since C++26) andrandom_access_iterator tovalue_type [edit] |
const_iterator | implementation-definedLegacyRandomAccessIterator,ConstexprIterator(since C++26) andrandom_access_iterator toconst value_type[edit] |
reverse_iterator | std::reverse_iterator<iterator>[edit] |
const_reverse_iterator | std::reverse_iterator<const_iterator>[edit] |
Member | Description |
container_type c (private) | the adapted container (exposition-only member object*) |
key_compare compare (private) | the comparison function object (exposition-only member object*) |
constructs theflat_set (public member function)[edit] | |
(destructor) (implicitly declared) | destroys every element of the container adaptor (public member function) |
assigns values to the container adaptor (public member function)[edit] | |
Iterators | |
returns an iterator to the beginning (public member function)[edit] | |
returns an iterator to the end (public member function)[edit] | |
returns a reverse iterator to the beginning (public member function)[edit] | |
returns a reverse iterator to the end (public member function)[edit] | |
Capacity | |
checks whether the container adaptor is empty (public member function)[edit] | |
returns the number of elements (public member function)[edit] | |
returns the maximum possible number of elements (public member function)[edit] | |
Modifiers | |
constructs element in-place (public member function)[edit] | |
constructs elements in-place using a hint (public member function)[edit] | |
inserts elements (public member function)[edit] | |
inserts a range of elements (public member function)[edit] | |
extracts the underlying container (public member function)[edit] | |
replaces the underlying container (public member function)[edit] | |
erases elements (public member function)[edit] | |
swaps the contents (public member function)[edit] | |
clears the contents (public member function)[edit] | |
Lookup | |
finds element with specific key (public member function)[edit] | |
returns the number of elements matching specific key (public member function)[edit] | |
checks if the container contains element with specific key (public member function)[edit] | |
returns an iterator to the first elementnot less than the given key (public member function)[edit] | |
returns an iterator to the first elementgreater than the given key (public member function)[edit] | |
returns range of elements matching a specific key (public member function)[edit] | |
Observers | |
returns the function that compares keys (public member function)[edit] | |
returns the function that compares keys in objects of typevalue_type (public member function)[edit] |
(C++23) | lexicographically compares the values of twoflat_set s(function template)[edit] |
(C++23) | specializes thestd::swap algorithm (function template)[edit] |
(C++23) | erases all elements satisfying specific criteria (function template)[edit] |
specializes thestd::uses_allocator type trait (class template specialization)[edit] |
(C++23) | indicates that elements of a range are sorted and unique (tag)[edit] |
The member typesiterator
andconst_iterator
may be aliases to the same type. This means defining a pair of function overloads using the two types as parameter types may violate theOne Definition Rule. Sinceiterator
is convertible toconst_iterator
, a single function with aconst_iterator
as parameter type will work instead.
Some advantages of flat set over other standardcontainer adaptors are:
KeyContainer
, keys are stored in a contiguous block(s) of memory).Some disadvantages of flat set are:
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_flat_set | 202207L | (C++23) | std::flat_set andstd::flat_multiset |
__cpp_lib_constexpr_flat_set | 202502L | (C++26) | constexprstd::flat_set |
This section is incomplete Reason: no example |
(C++23) | adapts a container to provide a collection of keys, sorted by keys (class template)[edit] |
collection of unique keys, sorted by keys (class template)[edit] | |
(C++11) | collection of unique keys, hashed by keys (class template)[edit] |