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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::unordered_set::insert - std::unordered_set::insert

Synopsis
	  std::pair<iterator,bool> insert( const value_type& value );	   (1)
       (since C++11)
	  std::pair<iterator,bool> insert( value_type&&	value );	   (2)
       (since C++11)
	  iterator insert( const_iterator hint,	const value_type& value	); (3)
       (since C++11)
	  iterator insert( const_iterator hint,	value_type&& value );	   (4)
       (since C++11)
	  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.
	  3-4) Inserts value, using hint as a non-binding suggestion to	 where
       the search
	  should start.
	  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.
	  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-8

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 <unordered_set>
	#include <iostream>
	#include <array>

	std::ostream& operator<<  (std::ostream&  os,  std::unordered_set<int>
       const& s) {
	  for (os << "[" << s.size() <<	"] { ";	int i :	s)
	    os << i << ' ';
	  return os << "}\n";
	}

	int main ()
	{
	  std::unordered_set<int> nums = {2, 3,	4};

	  std::cout << "Initially: " <<	nums;
	  auto p = nums.insert (1); // insert element
	  std::cout  <<	 "'1' was inserted: " << std::boolalpha	<< p.second <<
       '\n';
	  std::cout << "After insertion: " << nums;

	  nums.insert (p.first,	0); // insert with hint
	  std::cout << "After insertion: " << nums;

	  std::array<int, 4> a	= {10, 11, 12, 13};
	  nums.insert (a.begin (), a.end ()); // insert	range
	  std::cout << "After insertion: " << nums;

	  nums.insert ({20, 21,	22, 23}); // insert initializer_list
	  std::cout << "After insertion: " << nums;

	  std::unordered_set<int> other_nums = {42, 43};
	  auto node = other_nums.extract (other_nums.find (42));
	  nums.insert (std::move (node)); // insert node
	  std::cout << "After insertion: " << nums;

	  node = other_nums.extract (other_nums.find (43));
	  nums.insert (nums.begin (), std::move	(node)); // insert  node  with
       hint
	  std::cout << "After insertion: " << nums;
	}

Possible output:
	Initially: [3] { 4 3 2 }
	'1' was	inserted: true
	After insertion: [4] { 1 2 3 4 }
	After insertion: [5] { 0 1 2 3 4 }
	After insertion: [9] { 13 12 11	10 4 3 2 1 0 }
	After insertion: [13] {	23 22 13 12 11 10 21 4 20 3 2 1	0 }
	After insertion: [14] {	42 23 22 13 12 11 10 21	4 20 3 2 1 0 }
	After insertion: [15] {	43 42 23 22 13 12 11 10	21 4 20	3 2 1 0	}

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)
	  inserter	creates	 a  std::insert_iterator of type inferred from
       the argument
		       (function template)

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

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

home | help