home | help
std::flat_m...insert_range(3)  C++ Standard Libary std::flat_m...insert_range(3)

NAME
     std::flat_map::insert_range - std::flat_map::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 into underlying contain-
     ers c as if
	by:

      for (const auto& e : rg)
      {
	  c.keys.insert(c.keys.end(), e.first);
	  c.values.insert(c.values.end(), e.second);
      }

	Then, sorts the  range	of  newly  inserted  elements  with  respect  to
     value_comp().
	Merges	the  resulting sorted range and the sorted range of pre-existing
     elements into
	a single sorted range. Finally, erases the duplicate elements as if by:

      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());

	Each iterator in the range rg is dereferenced exactly once. The behavior
     is
	undefined if rg overlaps with the container.

	 Information on iterator invalidation is copied from here

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

Return value
	(none)

Complexity
	N  +  MA.log(M),  where  N  is	size()	before	the  operation	and M is
     ranges::distance(rg).

Notes
	Since insert_range performs an in-place merge operation, that may  allo-
     cate memory.

Example
     // Run this code

      #include <iostream>
      #include <flat_map>
      #include <utility>

      void println(auto, auto const& 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);
      }

Output:
      {-2,-22} {-1,-11} {1,11} {2,22} {3,33} {4,44}

See also
	insert inserts elements
	       (public member function)

http://cppreference.com 	   2024.06.10	   std::flat_m...insert_range(3)

home | help