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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::set::insert	- std::set::insert

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

	  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 in	the position as	close as possible to the posi-
       tion just prior
	  to pos.
	  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 the position just prior to pos. The behavior is
       undefined if nh
	  is not empty and get_allocator() != nh.get_allocator().
	  9) If	*this already contains an element which	transparently compares
       equivalent to
	  x, does nothing. Otherwise, constructs an object u of	the value_type
       with
	  std::forward<K>(x) and then inserts u	into *this. If	equal_range(u)
       ==
	  equal_range(x)  is  false, the behavior is undefined.	The value_type
       must be
	  EmplaceConstructible into set	from std::forward<K>(x). This overload
       participates in
	  overload resolution only if the qualified-id Compare::is_transparent
       is valid	and
	  denotes a type. It allows calling this function without constructing
       an instance of
	  Key.
	  10) If *this already contains	an element  which  transparently  com-
       pares equivalent	to
	  x, does nothing. Otherwise, constructs an object u of	the value_type
       with
	  std::forward<K>(x)  and then inserts u into *this in the position as
       close as
	  possible to the position just	prior to  pos.	If  equal_range(u)  ==
       equal_range(x) is
	  false, the behavior is undefined. The	value_type must	be EmplaceCon-
       structible into
	  set  from std::forward<K>(x).	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
	    *  the qualified-id	Compare::is_transparent	is valid and denotes a
       type,
	  which	together allows	calling	this function without constructing  an
       instance	of Key.

	  No iterators or references are 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
	  pos	       - iterator to the position before which the new element
       will be inserted
	  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
	  x	      -	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-8, 9, 10

Complexity
	  1,2) Logarithmic in the size of the container, O(log(size())).
	  3,4) Amortized constant if the insertion  happens  in	 the  position
       just
	  after
	  (until C++11)
	  before
	  (since  C++11)  pos, logarithmic in the size of the container	other-
       wise.
	  5,6) O(Nlog(size() + N)), where N is the number of elements  to  in-
       sert.
	  7) Logarithmic in the	size of	the container, O(log(size())).
	  8)  Amortized	constant if the	insertion happens in the position just
       before pos,
	  logarithmic in the size of the container otherwise.
	  9) Logarithmic in the	size of	the container, O(log(size())).
	  10) Amortized	constant if the	insertion happens in the position just
       before pos,
	  logarithmic in the size of the container otherwise.

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.

	  The  overloads  (5,6)	are often implemented as a loop	that calls the
       overload	(3) with
	  end()	as the hint; they are optimized	for  appending	a  sorted  se-
       quence (such as
	  another  std::set)  whose  smallest element is greater than the last
       element in *this.

		       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 <cassert>
	#include <iostream>
	#include <set>

	int main()
	{
	    std::set<int> set;

	    auto result_1 = set.insert(3);
	    assert(result_1.first != set.end()); // it is a valid iterator
	    assert(*result_1.first == 3);
	    if (result_1.second)
		std::cout << "insert done\n";

	    auto result_2 = set.insert(3);
	    assert(result_2.first == result_1.first); // same iterator
	    assert(*result_2.first == 3);
	    if (!result_2.second)
		std::cout << "no insertion\n";
	}

Output:
	insert done
	no insertion

	  Defect reports

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

	    DR	  Applied to	     Behavior as published		  Cor-
       rect behavior
								    the	inser-
       tion is required
			     pos was just a hint, it could be	    to
	  LWG  233  C++98	totally	 ignored			 be as
       close as	possible to
								    the
								    position
       just prior to pos
			     the complexity of overload	 (5)  was      removed
       the linear
	  LWG  264  C++98      required	to be linear if		      require-
       ment
			     the range [first, last) is	 sorted	      in  this
       special case
			     according to Compare
			     in	the return value of overload (1),
	  LWG 316 C++98	     it	was not	specified		    success is
			     which  bool value indicates a	     indicated
       by true
			     successful	insertion

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)

Category:
	    * Todo with	reason

http://cppreference.com		  2024.06.10		   std::set::insert(3)

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

home | help