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

FreeBSD Manual Pages

  
 
  

home | help
std::unorde...map::emplace(3) C++ Standard Libarystd::unorde...map::emplace(3)

NAME
       std::unordered_map::emplace - std::unordered_map::emplace

Synopsis
	  template< class... Args >			       (since C++11)
	  std::pair<iterator,bool> emplace( Args&&... args );

	  Inserts  a  new element into the container constructed in-place with
       the given args if
	  there	is no element with the key in the container.

	  Careful use of emplace allows	the  new  element  to  be  constructed
       while avoiding
	  unnecessary copy or move operations. The constructor of the new ele-
       ment (i.e.
	  std::pair<const  Key,	 T>) is	called with exactly the	same arguments
       as supplied to
	  emplace, forwarded via std::forward<Args>(args).... The element  may
       be constructed
	  even	if  there already is an	element	with the key in	the container,
       in which	case the
	  newly	constructed element will be destroyed immediately.

	  If rehashing occurs due to the insertion, all	iterators are  invali-
       dated. Otherwise
	  iterators  are not affected. References are not invalidated. Rehash-
       ing occurs only if
	  the  new  number  of	elements   is	greater	  than	 max_load_fac-
       tor()*bucket_count().

Parameters
	  args - arguments to forward to the constructor of the	element

Return value
	  Returns a pair consisting of an iterator to the inserted element, or
       the
	  already-existing element if no insertion happened, and a bool	denot-
       ing whether the
	  insertion  took  place  (true	if insertion happened, false if	it did
       not).

Exceptions
	  If an	exception is thrown by any operation, this function has	no ef-
       fect (strong
	  exception guarantee).

Complexity
	  Amortized constant on	average, worst case linear in the size of  the
       container.

Example
       // Run this code

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

	int main()
	{
	    std::unordered_map<std::string, std::string> m;

	    // uses pair's move	constructor
	    m.emplace(std::make_pair(std::string("a"), std::string("a")));

	    // uses pair's converting move constructor
	    m.emplace(std::make_pair("b", "abcd"));

	    // uses pair's template constructor
	    m.emplace("d", "ddd");

	    // uses pair's piecewise constructor
	    m.emplace(std::piecewise_construct,
		      std::forward_as_tuple("c"),
		      std::forward_as_tuple(10,	'c'));
	    // as of C++17, m.try_emplace("c", 10, 'c'); can be	used

	    for	(const auto &p : m) {
		std::cout << p.first <<	" => " << p.second << '\n';
	    }
	}

Possible output:
	a => a
	b => abcd
	c => cccccccccc
	d => ddd

See also
	  emplace_hint constructs elements in-place using a hint
	  (C++11)      (public member function)
	  try_emplace	inserts	in-place if the	key does not exist, does noth-
       ing if the key
	  (C++17)      exists
		       (public member function)
		       inserts elements
	  insert       or nodes
	  (C++11)      (since C++17)
		       (public member function)

http://cppreference.com		  2022.07.31	 std::unorde...map::emplace(3)

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

home | help