std::unorde...insert_range(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

okay so this page is std::unordered_multiset::insert_range β€” and the NAME line literally says std::unordered_multiset::insert_range - std::unordered_multiset::insert_range, because why not repeat the icon herself πŸ’…. The manual is C++ Standard Libary (spelling and all), and the page tag is std::unorde...insert_range(3). She’s a C++23 girlie: insert_range copies a whole range into your multiset, and honestly? obsessed. πŸ’–


✨ 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. Like, every single one gets copied in. 🫢

Each iterator in the range rg is dereferenced exactly once. The behavior is undefined if rg overlaps with the container β€” no cap, do not do that, that’s the dangerous girlie behavior 😭.

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. So yeah: rehash = iterator vibe check failed πŸ’€.


πŸŽ€ Parameters πŸŽ€

  • rg β€” a container compatible range, that is, an input_range whose elements are convertible to T. Basically a range that’s compatible with the container, bestie ✨.

πŸ¦‹ Type requirements πŸ¦‹

  • value_type must be EmplaceConstructible into unordered_multiset from *ranges::begin(rg). Otherwise, the behavior is undefined. UNDEFINED, bestie β€” we do not play with that πŸ™ˆ.

🌸 Return value 🌸

(none) β€” nothing, nada, zero returns. She just does the thing and leaves πŸ’….


⭐ Complexity ⭐

Average case O(N), where N is ranges::distance(rg), worst case O(N·(a.size() + 1)). Math girlie said what she said 🧚.


🌈 Notes 🌈

Feature-test macro table, but make it cute:

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

iykyk πŸ‘‘.


πŸ“ 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_multiset{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 πŸ‘‘

1 -2 3 3 2 -1 4

πŸ‘€ See also πŸ‘€

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

yep, those are the See also crumbs β€” preserved exactly, periodt πŸ’œ.


mwah πŸ’‹ β€” source/version: http://cppreference.com, dated 2024.06.10, page tag std::unorde...insert_range(3). That’s the whole footer, bestie 🫢.

πŸ“¦ where this page comes from