std::flat_set<Key,Compare,KeyContainer>:: insert_range
|
template
<
container-compatible-range
<
value_type
>
R
>
void insert_range ( R && rg ) ; |
(seit C++23)
(constexpr seit C++26) |
|
Fügt eine Kopie jedes Elements im Bereich
rg
in den zugrundeliegenden Container
c
ein, als ob durch:
for (const auto& e : rg) c.insert(c.end(), e);
Sortiert dann den Bereich der neu eingefügten Elemente in Bezug auf
compare
.
Führt den resultierenden sortierten Bereich und den sortierten Bereich der bereits vorhandenen Elemente zu einem einzigen sortierten Bereich zusammen.
Löscht schließlich alle bis auf das erste Element aus jeder Gruppe aufeinanderfolgender äquivalenter Elemente.
Jeder Iterator im Bereich rg wird genau einmal dereferenziert.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert:
-
value_typeist nicht EmplaceConstructible inflat_setvon * ranges:: begin ( rg ) - rg und * this überlappen sich.
| Informationen zur Iterator-Invalidierung sind kopiert von hier |
Inhaltsverzeichnis |
Parameter
| rg | - |
ein
container compatible range
, also ein
input_range
, dessen Elemente konvertierbar zu
T
sind
|
Komplexität
S+N·log(N) , wobei S die size ( ) und N den ranges:: distance ( rg ) darstellt.
Hinweise
Da
insert_range
einen In-Place-Merge-Vorgang durchführt, kann dies Speicher allozieren.
Beispiel
#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); }
Ausgabe:
-2 -1 1 2 3 4
Siehe auch
|
fügt Elemente ein
(öffentliche Elementfunktion) |