std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: insert_range
|
template
<
container-compatible-range
<
value_type
>
R
>
void insert_range ( R && rg ) ; |
(depuis C++23)
(constexpr depuis C++26) |
|
Insère une copie de chaque élément dans la plage
rg
dans les conteneurs sous-jacents
c
comme si par :
for (const auto& e : rg) { c.keys.insert(c.keys.end(), e.first); c.values.insert(c.values.end(), e.second); }
Trie ensuite la plage des éléments nouvellement insérés par rapport à value_comp() . Fusionne la plage triée résultante et la plage triée des éléments préexistants en une seule plage triée. Enfin, supprime les éléments en double comme si par :
auto zv = views::zip(c.keys, c.values); auto it = ranges::unique(zv, key_equiv(compare)).begin(); auto dist = std::distance(zv.begin(), it); c.keys.erase(c.keys.begin() + dist, c.keys.end()); c.values.erase(c.values.begin() + dist, c.values.end());
` et contient des termes spécifiques au C++ qui doivent être préservés selon les instructions. La structure HTML et les attributs ont également été conservés intacts.
Chaque itérateur dans la plage rg est déréférencé exactement une fois.
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
-
value_typen'est pas EmplaceConstructible dansflat_mapà partir de * ranges:: begin ( rg ) - rg et * this se chevauchent.
| Les informations sur l'invalidation des itérateurs sont copiées depuis ici |
Table des matières |
Paramètres
| rg | - |
un
intervalle compatible avec un conteneur
, c'est-à-dire un
input_range
dont les éléments sont convertibles en
T
|
Complexité
S+N·log(N) , où S est size ( ) et N est ranges:: distance ( rg ) .
Notes
Puisque
insert_range
effectue une opération de fusion en place, cela peut allouer de la mémoire.
Exemple
#include <iostream> #include <flat_map> #include <utility> void println(auto, const auto& container) { for (const auto& [key, value] : container) std::cout << '{' << key << ',' << value << '}' << ' '; std::cout << '\n'; } int main() { auto container = std::flat_map{std::pair{1, 11}, {3, 33}, {2, 22}, {4, 44}}; const auto rg = {std::pair{-1, -11}, {3, -33}, {-2, -22}}; #ifdef __cpp_lib_containers_ranges container.insert_range(rg); #else container.insert(rg.begin(), rg.end()); #endif println("{}", container); }
Sortie :
{-2,-22} {-1,-11} {1,11} {2,22} {3,33} {4,44}
Voir aussi
|
insère des éléments
(fonction membre publique) |