Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: insert_range

From cppreference.net

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());
**Note:** Le code C++ n'a pas été traduit car il se trouve dans des balises `
` 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 :

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)