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

FreeBSD Manual Pages

  
 
  

home | help
std::unordered_map::insert(3) C++ Standard Libarystd::unordered_map::insert(3)

NAME
       std::unordered_map::insert - std::unordered_map::insert

Synopsis
	  std::pair<iterator,bool> insert( const value_type& value );	   (1)
       (since C++11)
	  std::pair<iterator,bool> insert( value_type&&	value );	   (1)
       (since C++17)
	  template< class P >						   (2)
       (since C++11)
	  std::pair<iterator,bool> insert( P&& value );
	  iterator insert( const_iterator hint,	const value_type& value	); (3)
       (since C++11)
	  iterator insert( const_iterator hint,	value_type&& value );	   (3)
       (since C++17)
	  template< class P >						   (4)
       (since C++11)
	  iterator insert( const_iterator hint,	P&& value );
	  template< class InputIt >					   (5)
       (since C++11)
	  void insert( InputIt first, InputIt last );
	  void insert( std::initializer_list<value_type> ilist );	   (6)
       (since C++11)
	  insert_return_type insert( node_type&& nh );			   (7)
       (since C++17)
	  iterator insert( const_iterator hint,	node_type&& nh );	   (8)
       (since C++17)

	  Inserts  element(s) into the container, if the container doesn't al-
       ready contain an
	  element with an equivalent key.

	  1-2) Inserts value. The overload (2) is equivalent to
	  emplace(std::forward<P>(value)) and only  participates  in  overload
       resolution if
	  std::is_constructible<value_type, P&&>::value	== true.
	  3-4)	Inserts	value, using hint as a non-binding suggestion to where
       the search
	  should start.	The overload (4) is equivalent to emplace_hint(hint,
	  std::forward<P>(value)) and only participates	in overload resolution
       if
	  std::is_constructible<value_type, P&&>::value	== true.
	  5) Inserts elements from range [first, last).	If  multiple  elements
       in the range have
	  keys that compare equivalent,	it is unspecified which	element	is in-
       serted (pending
	  LWG2844).
	  6)  Inserts  elements	 from initializer list ilist. If multiple ele-
       ments in	the range
	  have keys that compare equivalent, it	is unspecified	which  element
       is inserted
	  (pending LWG2844).
	  7)  If  nh is	an empty node handle, does nothing. Otherwise, inserts
       the element owned
	  by nh	into the container , if	the container doesn't already  contain
       an element with
	  a key	equivalent to nh.key().	The behavior is	undefined if nh	is not
       empty and
	  get_allocator() != nh.get_allocator().
	  8)  If  nh is	an empty node handle, does nothing and returns the end
       iterator.
	  Otherwise, inserts the element owned by nh into  the	container,  if
       the container
	  doesn't  already  contain  an	 element  with	a  key	equivalent  to
       nh.key(), and returns
	  the iterator pointing	to the element with key	equivalent to nh.key()
       (regardless of
	  whether the insert succeeded or failed). If the insertion  succeeds,
       nh is moved
	  from,	 otherwise it retains ownership	of the element.	The element is
       inserted	as
	  close	as possible to hint. The behavior is undefined if  nh  is  not
       empty and
	  get_allocator() != nh.get_allocator().

	  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().
	  If the insertion is successful, pointers and references to the  ele-
       ment obtained
	  while	 it  is	 held in the node handle are invalidated, and pointers
       and references
	  obtained to that element before it was extracted become valid.
	  (since C++17)

Parameters
	  hint	      -	iterator, used as a suggestion as to where  to	insert
       the content
	  value	      -	element	value to insert
	  first, last -	range of elements to insert
	  ilist	      -	initializer list to insert the values from
	  nh	      -	a compatible node handle

Type requirements
	  -
	  InputIt must meet the	requirements of	LegacyInputIterator.

Return value
	  1-2)	Returns	 a pair	consisting of an iterator to the inserted ele-
       ment (or	to the
	  element that prevented the insertion)	and a  bool  denoting  whether
       the insertion took
	  place	(true if insertion happened, false if it did not).
	  3-4)	Returns	an iterator to the inserted element, or	to the element
       that prevented
	  the insertion.
	  5-6) (none)
	  7) Returns an	insert_return_type with	 the  members  initialized  as
       follows:

	    *  If  nh is empty,	inserted is false, position is end(), and node
       is empty.
	    * Otherwise	if the insertion took place, inserted is  true,	 posi-
       tion points to the
	      inserted element,	and node is empty.
	    *  If the insertion	failed,	inserted is false, node	has the	previ-
       ous value of nh,
	      and position points to an	 element  with	a  key	equivalent  to
       nh.key().

	  8)  End  iterator if nh was empty, iterator pointing to the inserted
       element if
	  insertion took place,	and iterator pointing to an element with a key
       equivalent to
	  nh.key() if it failed.

Exceptions
	  1-4) If an exception is thrown by any	operation, the	insertion  has
       no effect.

	   This	section	is incomplete
	   Reason: cases 5-6

Complexity
	  1-4) Average case: O(1), worst case O(size())
	  5-6)	Average	 case:	O(N), where N is the number of elements	to in-
       sert. Worst case:
	  O(N*size()+N)
	  7-8) Average case: O(1), worst case O(size())

Notes
	  The hinted insert (3,4) does not return a boolean in order to	be
	  signature-compatible with positional insert on  sequential  contain-
       ers, such as
	  std::vector::insert.	This  makes  it	possible to create generic in-
       serters such as
	  std::inserter. One way to check success of a	hinted	insert	is  to
       compare size()
	  before and after.

Example
       // Run this code

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

	int main ()
	{
	    std::unordered_map<int,  std::string>  dict	 =  {{1,  "one"},  {2,
       "two"}};
	    dict.insert({3, "three"});
	    dict.insert(std::make_pair(4, "four"));
	    dict.insert({{4, "another four"}, {5, "five"}});

	    bool ok = dict.insert({1, "another one"}).second;
	    std::cout << "inserting 1 -> \"another one\" "
		      << (ok ? "succeeded" : "failed") << '\n';

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

Possible output:
	inserting 1 -> "another	one" failed
	contents:
	 5 => five
	 1 => one
	 2 => two
	 3 => three
	 4 => four

See also
	  emplace	   constructs element in-place
	  (C++11)	   (public member function)
	  emplace_hint	   constructs elements in-place	using a	hint
	  (C++11)	   (public member function)
	  insert_or_assign inserts an element or assigns to the	 current  ele-
       ment if the key
	  (C++17)	   already exists
			   (public member function)
	  inserter	    creates  a	std::insert_iterator  of type inferred
       from the	argument
			   (function template)

http://cppreference.com		  2022.07.31	 std::unordered_map::insert(3)

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

home | help