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)
	  template< class K >						   (9)
       (since C++23)
	  std::pair<iterator, bool> insert( K&&	obj );
	  template<		     class		   K		     >
       (10) (since C++23)
	  iterator insert( const_iterator hint,	K&& obj	);

	  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. hint is used as
       a non-binding
	  suggestion to	where the search should	start. The behavior  is	 unde-
       fined if	nh is not
	  empty	and get_allocator() != nh.get_allocator().
	  9) If	*this already contains an element which	transparently compares
       equivalent to
	  obj,	does  nothing. Otherwise, constructs an	object u of value_type
       with
	  std::forward<K>(obj)	 and   then   inserts	u   into   *this.   If
       equal_range(u) !=
	  hash_function()(obj)	||  contains(u)	is true, the behavior is unde-
       fined. The
	  value_type must be EmplaceConstructible into unordered_set from
	  std::forward<K>(obj).	This overload participates in overload resolu-
       tion only if
	  Hash::is_transparent and KeyEqual::is_transparent are	valid and each
       denotes a type.
	  This assumes that such Hash is callable with both K  and  Key	 type,
       and that	the
	  KeyEqual  is transparent, which, together, allows calling this func-
       tion without
	  constructing an instance of Key.
	  10) If *this already contains	an element  which  transparently  com-
       pares equivalent	to
	  obj, does nothing.

	  Otherwise,  constructs  an  object  u	 of  value_type	with std::for-
       ward<K>(obj) and	then
	  inserts u into *this.	Template:hint is used as a non-binding sugges-
       tion to where the
	  search should	start. If equal_range(u)  !=  hash_function()(obj)  ||
       contains(u) is
	  true,	 the behavior is undefined. The	value_type must	be EmplaceCon-
       structible into
	  unordered_set	from std::forward<K>(obj). This	overload  participates
       in overload
	  resolution only if:

	    *  std::is_convertible_v<K&&, const_iterator> and std::is_convert-
       ible_v<K&&,
	      iterator>	are both false,	and
	    * Hash::is_transparent and KeyEqual::is_transparent	are valid  and
       each denotes a
	      type.  This  assumes  that such Hash is callable with both K and
       Key type, and that
	      the KeyEqual is transparent,
	  which, together, allows calling this function	 without  constructing
       an instance of
	  Key.

	  If  after  the  operation the	new number of elements is greater than
       old
	  max_load_factor() * bucket_count() a rehashing takes place.
	  If rehashing occurs (due to the insertion), all iterators are	inval-
       idated. Otherwise
	  (no rehashing), iterators are	not invalidated.
	  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
	  obj	      -	a value	of any type that can be	transparently compared
       with a key

Type requirements
	  -
	  InputIt must meet the	requirements of	LegacyInputIterator.

Return value
	  1,2) A pair consisting of an iterator	to the inserted	element	(or to
       the element
	  that	prevented  the	insertion) and a bool value set	to true	if and
       only if the
	  insertion took place.
	  3,4) An iterator to the inserted element, or	to  the	 element  that
       prevented the
	  insertion.
	  5,6) (none)
	  7)  An  object of 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.
	  9)  A	 pair consisting of an iterator	to the inserted	element	(or to
       the element that
	  prevented the	insertion) and a bool value set	to true	if and only if
       the insertion
	  took place.
	  10) An iterator to the inserted element, or to the element that pre-
       vented the
	  insertion.

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

	   This	section	is incomplete
	   Reason: cases 5-10

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-10)	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.

		       Feature-test    macro		       Value	   Std
       Feature
									Het-
       erogeneous
									over-
       loads for the
									re-
       maining member
	  __cpp_lib_associative_heterogeneous_insertion	202311L	(C++26)	 func-
       tions in	ordered
									and
       unordered
									asso-
       ciative
									con-
       tainers.	(9,10)

Example
       // Run this code

	#include <array>
	#include <iostream>
	#include <unordered_set>

	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 << "1) Initially:	" << nums << std::boolalpha;
	    auto p = nums.insert(1); //	insert element,	overload (1)
	    std::cout << "2) '1' was inserted: " << p.second <<	'\n';
	    std::cout << "3) After insertion: "	<< nums;

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

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

	    nums.insert({20, 21, 22, 23}); // insert initializer_list, (6)
	    std::cout << "6) 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, overload (7)
	    std::cout << "7) After insertion: "	<< nums;

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

Possible output:
	1) Initially: [3] { 4 3	2 }
	2) '1' was inserted: true
	3) After insertion: [4]	{ 1 2 3	4 }
	4) After insertion: [5]	{ 0 1 2	3 4 }
	5) After insertion: [9]	{ 13 12	11 10 4	3 2 1 0	}
	6) After insertion: [13] { 23 22 13 12 11 10 21	4 20 3 2 1 0 }
	7) After insertion: [14] { 42 23 22 13 12 11 10	21 4 20	3 2 1 0	}
	8) 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
		       (public member function)
	  emplace_hint constructs elements in-place using a hint
		       (public member function)
	  inserter	creates	 a  std::insert_iterator of type inferred from
       the argument
		       (function template)

Category:
	    * Todo with	reason

http://cppreference.com		  2024.06.10	 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.1.quarterly>

home | help