Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::unorde...imap::merge(3)  C++ Standard Libary std::unorde...imap::merge(3)

NAME
       std::unordered_multimap::merge -	std::unordered_multimap::merge

Synopsis
	  template< class H2, class P2 >
	  void	merge(	std::unordered_map<Key,	 T, H2,	P2, Allocator>&	source
       (1) (since C++17)
	  );
	  template< class H2, class P2 >
	  void merge( std::unordered_map<Key, T, H2, P2,  Allocator>&&	source
       (2) (since C++17)
	  );
	  template< class H2, class P2 >
	  void	merge(	std::unordered_multimap<Key,  T,  H2,  P2, Allocator>&
       (3) (since C++17)
	  source );
	  template< class H2, class P2 >
	  void merge( std::unordered_multimap<Key,  T,	H2,  P2,  Allocator>&&
       (4) (since C++17)
	  source );

	  Attempts  to extract ("splice") each element in source and insert it
       into *this using
	  the hash function and	key equality predicate 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 ele-
       ments remain valid,
	  but now refer	into *this, not	into source.  Iterators	 referring  to
       the transferred
	  elements and all iterators referring to *this	are invalidated.

	  The  behavior	 is undefined if get_allocator() != source.get_alloca-
       tor().

Parameters
	  source - compatible container	to transfer the	nodes from

Return value
	  (none)

Complexity
	  Average case O(N), worst  case  O(N  *  size()  +  N),  where	 N  is
       source.size().

Example
       // Run this code

	#include <iostream>
	#include <string>
	#include <unordered_map>
	#include <utility>

	// print out a std::pair
	template<class Os, class U, class V>
	Os& operator<<(Os& os, const std::pair<U,V>& p)
	{
	    return os << '{' <<	p.first	<< ", "	<< p.second << '}';
	}

	// print out an	associative container
	template<class Os, class K, class V>
	Os& operator<<(Os& os, const std::unordered_multimap<K,	V>& v)
	{
	    os << '[' << v.size() << "]	{";
	    bool o{};
	    for	(const auto& e : v)
		os << (o ? ", "	: (o = 1, "")) << e;
	    return os << "}\n";
	}

	int main()
	{
	    std::unordered_multimap<std::string, int>
		p{{"C",	3}, {"B", 2}, {"A", 1},	{"A", 0}},
		q{{"E",	6}, {"E", 7}, {"D", 5},	{"A", 4}};

	    std::cout << "p: " << p << "q: " <<	q;

	    p.merge(q);

	    std::cout << "p.merge(q);\n" << "p:	" << p << "q: "	<< q;
	}

Possible output:
	p: [4] {{A, 1},	{A, 0},	{B, 2},	{C, 3}}
	q: [4] {{A, 4},	{D, 5},	{E, 6},	{E, 7}}
	p.merge(q);
	p:  [8]	 {{E,  6}, {E, 7}, {C, 3}, {A, 1}, {A, 0}, {A, 4}, {D, 5}, {B,
       2}}
	q: [0] {}

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

http://cppreference.com		  2024.06.10	  std::unorde...imap::merge(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::unordered_multimap::merge&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help