Namespaces
Variants

std::unordered_set<Key,Hash,KeyEqual,Allocator>:: 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 si et seulement s'il n'existe aucun élément avec une clé équivalente à la clé de cet élément dans * this .

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 :

Si après l'opération le nouveau nombre d'éléments dépasse l'ancien max_load_factor() * bucket_count() un rehashing se produit.
Si un rehashing se produit (en raison de l'insertion), tous les itérateurs sont invalidés. Sinon (aucun rehashing), les itérateurs ne sont pas invalidés.

Table des matières

Paramètres

rg - une plage compatible avec un conteneur , c'est-à-dire une input_range dont les éléments sont convertibles en T

Complexité

Cas moyen N , cas le pire O(N·S+N) , où S est size ( ) et N est ranges:: distance ( rg ) .

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_containers_ranges 202202L (C++23) Construction et insertion compatibles avec les gammes

Exemple

#include <iostream>
#include <unordered_set>
void println(auto, const auto& container)
{
    for (const auto& elem : container)
        std::cout << elem << ' ';
    std::cout << '\n';
}
int main()
{
    auto container = std::unordered_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);
}

Sortie possible :

4 -1 2 3 -2 1

Voir aussi

insère des éléments ou des nœuds (depuis C++17)
(fonction membre publique)