std::flat_set<Key,Compare,KeyContainer>::insert_range
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Containers library
(C++17)
(C++11)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++23)
(C++23)
(C++20)
(C++23)
Tables
template< container-compatible-range <value_type> R >
void insert_range( R&& rg );
(since C++23) void insert_range( R&& rg );
(constexpr since C++26)
Inserts a copy of each element in the range rg into underlying container c
as if by:
for (const auto& e : rg) c.insert(c.end(), e);
Then, sorts the range of newly inserted elements with respect to compare
.
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 range rg is dereferenced exactly once.
If any of the following conditions is satisfied, the behavior is undefined:
-
value_type
is not EmplaceConstructible intoflat_set
from *ranges::begin (rg) - rg and *this overlap.
Information on iterator invalidation is copied from here
Contents
[edit] Parameters
[edit] Complexity
\(\scriptsize S + N \cdot \log(N)\)S+N·log(N), where \(\scriptsize S\)S is size() and \(\scriptsize N\)N is ranges::distance (rg).
[edit] Notes
Since insert_range
performs an in-place merge operation, that may allocate memory.
[edit] Example
Run this code
#include <iostream> #include <flat_set> void println(auto, const auto& container) { for (const auto& elem : container) std::cout << elem << ' '; std::cout << '\n'; } int main() { auto container = std::flat_set {1, 3, 2, 4}; const auto 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