std::multimap::merge(3)

NAME
std::multimap::merge - std::multimap::merge

Synopsis
   template<class C2> (1) (since C++17)
   void merge( std::map<Key, T, C2, Allocator>& source );
   template<class C2> (2) (since C++17)
   void merge( std::map<Key, T, C2, Allocator>&& source );
   template<class C2> (3) (since C++17)
   void merge( std::multimap<Key, T, C2, Allocator>& source );
   template<class C2> (4) (since C++17)
   void merge( std::multimap<Key, T, C2, Allocator>&& source );
   Attempts to extract ("splice") each element in source and insert it into *this using
   the comparison object of *this.
   No elements are copied or moved, only the internal pointers of the container nodes
   are repointed. All pointers and references to the transferred elements remain valid,
   but now refer into *this, not into source.
   The behavior is undefined if get_allocator() != source.get_allocator().

Parameters
   source - compatible container to transfer the nodes from

Return value
   (none)

Exceptions
   Does not throw unless comparison throws.

Complexity
   N*log(size()+N)), where N is source.size().

Example
// Run this code
 #include <map>
 #include <iostream>
 #include <string>
 int main()
 {
   std::multimap<int, std::string> ma {{1, "apple"}, {5, "pear"}, {10, "banana"}};
   std::multimap<int, std::string> mb {{2, "zorro"}, {4, "batman"}, {5, "X"}, {8, "alpaca"}};
   std::multimap<int, std::string> u;
   u.merge(ma);
   std::cout << "ma.size(): " << ma.size() << '\n';
   u.merge(mb);
   std::cout << "mb.size(): " << mb.size() << '\n';
   for(auto const &kv: u)
     std::cout << kv.first << ", " << kv.second << '\n';
 }

Output:
 ma.size(): 0
 mb.size(): 0
 1, apple
 2, zorro
 4, batman
 5, pear
 5, X
 8, alpaca
 10, banana

See also
   extract extracts nodes from the container
   (C++17) (public member function)
           inserts elements
   insert or nodes
           (since C++17)
           (public member function)