(C++17) | ||||
Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
Associative | ||||
Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
Views | ||||
(C++20) | ||||
(C++23) | ||||
Tables | ||||
Iterator invalidation | ||||
Member function table | ||||
Non-member function table |
template<container-compatible-range<value_type> R> void insert_range( R&& rg); | (since C++23) (constexpr since C++26) | |
Inserts a copy of each element in the rangerg into underlying containerc
as if by:
for(constauto& e: rg) c.insert(c.end(), e);
Then, sorts the range of newly inserted elements with respect tocompare
.Merges the resulting sorted range and the sorted range of pre-existing elements into a single sorted range.Finally, erases all but the first element from each group of consecutive equivalent elements.
Each iterator in the rangerg is dereferenced exactly once.
If any of the following conditions is satisfied, the behavior is undefined:
value_type
is notEmplaceConstructible intoflat_set
from*ranges::begin(rg)Information on iterator invalidation is copied fromhere |
Contents |
rg | - | acontainer compatible range, that is, aninput_range whose elements are convertible toT |
\(\scriptsize S + N \cdot \log(N)\)S+N·log(N), where\(\scriptsize S\)S issize() and\(\scriptsize N\)N isranges::distance(rg).
Sinceinsert_range
performs an in-place merge operation, that may allocate memory.
#include <iostream>#include <flat_set> void println(auto,constauto& container){for(constauto& elem: container)std::cout<< elem<<' ';std::cout<<'\n';} int main(){auto container=std::flat_set{1,3,2,4};constauto rg={-1,3,-2};#ifdef __cpp_lib_containers_ranges container.insert_range(rg);#else container.insert(rg.begin(), rg.end());#endif println("{}", container);}
Output:
-2 -1 1 2 3 4
inserts elements (public member function)[edit] |