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

FreeBSD Manual Pages

  
 
  

home | help
std::multimap::multimap(3)    C++ Standard Libary   std::multimap::multimap(3)

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

Synopsis
	  multimap();						     (1)
	  explicit multimap( const Compare& comp,		     (2)
	  const	Allocator& alloc = Allocator() );
	  explicit  multimap(  const  Allocator&  alloc	 );		   (3)
       (since C++11)
	  template< class InputIt >

	  multimap( InputIt first, InputIt last,		     (4)
	  const	Compare& comp =	Compare(),

	  const	Allocator& alloc = Allocator() );
	  template< class InputIt >

	  multimap(  InputIt  first,  InputIt  last,			   (5)
       (since C++14)

	  const	Allocator& alloc );
	  multimap( const multimap& other );			     (6)
	  multimap(  const  multimap&  other,  const  Allocator&  alloc	); (7)
       (since C++11)
	  multimap(  multimap&&	 other	 );				   (8)
       (since C++11)
	  multimap(  multimap&&	 other,	 const	Allocator&  alloc  );	   (9)
       (since C++11)
	  multimap( std::initializer_list<value_type> init,

	  const	 Compare&  comp	 =  Compare(),				  (10)
       (since C++11)

	  const	Allocator& alloc = Allocator() );
	  multimap(   std::initializer_list<value_type>	  init,		  (11)
       (since C++14)
	  const	Allocator& );

	  Constructs new container from	a variety of data sources and  option-
       ally using user
	  supplied allocator alloc or comparison function object comp.

	  1-3) Constructs an empty container.
	  4-5) Constructs the container	with the contents of the range [first,
       last).
	  6-7) Copy constructor. Constructs the	container with the copy	of the
       contents	of
	  other.

	  If   alloc  is  not  provided,  allocator  is	 obtained  by  calling
       (since
	  std::allocator_traits<allocator_type>::select_on_container_copy_con-
       struction( C++11)
	  other.get_allocator()).
	  The template parameter Allocator is only deduced from	the first  ar-
       gument	   (since
	  while	    used     in	   class    template	argument    deduction.
       C++23)

	  8-9) Move constructor. Constructs the	container with the contents of
       other using
	  move semantics. If alloc is not provided, allocator is  obtained  by
       move-construction
	  from the allocator belonging to other.

	  The  template	 parameter  Allocator  is  only	deduced	from the first
       (since C++23)
	  argument while used in class template	argument deduction.

	  10-11) Constructs the	container with the contents of the initializer
       list init.

Parameters
	  alloc	      -	allocator to use for all memory	 allocations  of  this
       container
	  comp	       - comparison function object to use for all comparisons
       of keys
	  first, last -	the range to copy the elements from
	  other	      -	another	container to be	used as	source	to  initialize
       the elements of
			the container with
	  init	       -  initializer  list  to	initialize the elements	of the
       container with

Type requirements
	  -
	  InputIt must meet the	requirements of	LegacyInputIterator.
	  -
	  Compare must meet the	requirements of	Compare.
	  -
	  Allocator must meet the requirements of Allocator.

Complexity
	  1-3) Constant
	  4-5) N log(N)	where N	= std::distance(first, last) in	general,  lin-
       ear in N	if the
	  range	is already sorted by value_comp().
	  6-7) Linear in size of other
	  8-9) Constant. If alloc is given and alloc !=	other.get_allocator(),
       then linear.
	  10-11)  N  log(N)  where  N =	init.size() in general,	linear in N if
       init is already
	  sorted by value_comp().

Exceptions
	  Calls	to Allocator::allocate may throw.

Notes
	  After	container  move	 construction  (overload  (8-9)),  references,
       pointers, and
	  iterators  (other  than the end iterator) to other remain valid, but
       refer to	elements
	  that are now in *this. The current standard makes this guarantee via
       the blanket
	  statement in [container.requirements.general]/12, and	a more	direct
       guarantee is
	  under	consideration via LWG 2321.

	  Although not formally	required until C++23, some implementations has
       already put the
	  template  parameter  Allocator  into non-deduced contexts in earlier
       modes.

Example
       // Run this code

	#include <iostream>
	#include <map>

	struct Point { double x, y; };
	struct PointCmp	{
	    bool operator()(const Point& lhs, const Point& rhs)	const {
		return lhs.x < rhs.x; // NB. ignores y on purpose
	    }
	};

	int main() {
	    std::multimap<int,		    int>	      m		     =
       {{1,1},{2,2},{3,3},{4,4},{5,5},{4,4},{3,3},{2,2},{1,1}};
	    for(auto& p: m) std::cout << p.first << ' '	<< p.second << '\n';

	    // custom comparison
	    std::multimap<Point, double, PointCmp> mag{
		{ {5, 12}, 13 },
		{ {3, 4}, 5 },
		{ {8, 15}, 17 },
		{ {3, -3}, -1 },
	    };

	  for(auto p : mag)
	      std::cout	<< "The	magnitude of ("	<< p.first.x
			<< ", "	<< p.first.y <<	") is "
			<< p.second << '\n';
	}

Output:
	1 1
	1 1
	2 2
	2 2
	3 3
	3 3
	4 4
	4 4
	5 5
	The magnitude of (3, 4)	is 5
	The magnitude of (3, -3) is -1
	The magnitude of (5, 12) is 13
	The magnitude of (8, 15) is 17

	 Defect	reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	    Applied to	      Behavior as published	   Correct be-
       havior
	  LWG 2193 C++11      the default constructor is explicit made non-ex-
       plicit

See also
	  operator= assigns values to the container
		    (public member function)

http://cppreference.com		  2022.07.31	    std::multimap::multimap(3)

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

home | help