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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::set::erase - std::set::erase

Synopsis
	  void	erase(	iterator  pos  );				(until
       C++11)
	  iterator  erase(  iterator  pos  );				(since
       C++11)
	  iterator  erase(  const_iterator  pos	 );			(since
       C++11)
	  void	   erase(     iterator	   first,     iterator	   last	    );
       (until C++11)
	  iterator     erase(	  const_iterator     first,		   (1)
       (since C++11)
	  const_iterator last );			       (2)
	  size_type erase( const Key& key );			   (3)
	  template<   class   K	  >					   (4)
       (since C++23)
	  size_type erase( K&& x );

	  Removes specified elements from the container.

	  1) Removes the element at pos.
	  Only one overload is provided	if iterator and	const_iterator are the
       same type.
	  (since C++11)
	  2)  Removes the elements in the range	[first;	last), which must be a
       valid range in
	  *this.
	  3) Removes the element (if one exists) with the  key	equivalent  to
       key.
	  4) Removes the element (if one exists) with key that compares	equiv-
       alent to	the
	  value	 x.  This overload participates	in overload resolution only if
       the qualified-id
	  Compare::is_transparent is valid and denotes a type, and neither it-
       erator nor
	  const_iterator is implicitly convertible from	K. It  allows  calling
       this function
	  without constructing an instance of Key.

	  References  and  iterators  to  the erased elements are invalidated.
       Other references
	  and iterators	are not	affected.

	  The iterator pos must	be valid and dereferenceable. Thus  the	 end()
       iterator	(which
	  is  valid, but is not	dereferenceable) cannot	be used	as a value for
       pos.

Parameters
	  pos	      -	iterator to the	element	to remove
	  first, last -	range of elements to remove
	  key	      -	key value of the elements to remove
	  x	      -	a value	of any type that can be	transparently compared
       with a key
			denoting the elements to remove

Return value
	  1-2)
	  (none)
	  (until C++11)
	  Iterator following the last removed element.
	  (since C++11)
	  3,4) Number of elements removed (0 or	1).

Exceptions
	  1,2) Throws nothing.
	  3,4) Any exceptions thrown by	the Compare object.

Complexity
	  Given	an instance c of set:

	  1) Amortized constant
	  2) log(c.size()) + std::distance(first, last)
	  3) log(c.size()) + c.count(key)
	  4) log(c.size()) + c.count(x)

Notes
	  Feature-test macro: __cpp_lib_associative_heterogeneous_erasure (for
       overload	(4))

Example
       // Run this code

	#include <set>
	#include <iostream>
	int main()
	{
	    std::set<int> c = {	1, 2, 3, 4,    1, 2, 3,	4 };

	    auto print = [&c] {
		std::cout << "c	= { ";
		for(int	n : c)
		    std::cout << n << '	';
		std::cout << "}\n";
	    };
	    print();

	    std::cout << "Erase	all odd	numbers:\n";
	    for(auto it	= c.begin(); it	!= c.end(); ) {
		if(*it % 2 != 0)
		    it = c.erase(it);
		else
		    ++it;
	    }
	    print();

	    std::cout << "Erase	1, erased count: " << c.erase(1) << '\n';
	    std::cout << "Erase	2, erased count: " << c.erase(2) << '\n';
	    std::cout << "Erase	2, erased count: " << c.erase(2) << '\n';
	    print();
	}

Output:
	c = { 1	2 3 4 }
	Erase all odd numbers:
	c = { 2	4 }
	Erase 1, erased	count: 0
	Erase 2, erased	count: 1
	Erase 2, erased	count: 0
	c = { 4	}

	 Defect	reports

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

	     DR	      Applied	 to		 Behavior     as     published
       Correct behavior
	  LWG 2059 C++11      overload for one const_iterator introduced over-
       load for	iterator
			      new ambiguity				 added

See also
	  clear	clears the contents
		(public	member function)

http://cppreference.com		  2022.07.31		    std::set::erase(3)

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

home | help