std::unordered_set::insert_range(3)

NAME
std::unordered_set::insert_range - std::unordered_set::insert_range

Synopsis
   template< container-compatible-range<value_type> R > (since C++23)
   void insert_range( R&& rg );
   Inserts a copy of each element in the range rg if and only if there is no element
   with key equivalent to the key of that element in *this.
   Each iterator in the range rg is dereferenced exactly once. The behavior is
   undefined if rg overlaps with the container.
   If after the operation the new number of elements is greater than old
   max_load_factor() * bucket_count() a rehashing takes place.
   If rehashing occurs (due to the insertion), all iterators are invalidated. Otherwise
   (no rehashing), iterators are not invalidated.

Parameters
   rg - a container compatible range, that is, an input_range whose
                      elements are convertible to T

Type requirements
   -
   value_type must be EmplaceConstructible into unordered_set from *ranges::begin(rg).
   Otherwise, the behavior is undefined.

Return value
   (none)

Complexity
   Average case O(N), where N is ranges::distance(rg), worst case O(N·(a.size() + 1)).

Notes
       Feature-test macro Value Std Feature
   __cpp_lib_containers_ranges 202202L (C++23) Ranges-aware construction and insertion

Example
// Run this code
 #include <iostream>
 #include <unordered_set>
 void println(auto, auto const& 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);
 }

Possible output:
 4 -1 2 3 -2 1

See also
          inserts elements
   insert or nodes
          (since C++17)
          (public member function)