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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::unordered_set::erase - std::unordered_set::erase

Synopsis
	  iterator  erase(  iterator  pos  );				(since
       C++11)
	  iterator  erase(  const_iterator  pos	 );			(since
       C++11)
	  iterator	      erase(	       const_iterator		first,
       (since C++11)
	  const_iterator last );			   (1)
	  size_type  erase(  const  Key&  key  );		     (2)   (3)
       (since C++11)
	  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  it-
       erator and
	  const_iterator are the same type.
	  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
	  Hash::is_transparent and KeyEqual::is_transparent are	valid and each
       denotes a type,
	  and  neither	iterator  nor const_iterator is	implicitly convertible
       from K. 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 with-
       out constructing
	  an instance of Key.

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

	  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.

	  The  order  of  the elements that are	not erased is preserved. (This
       makes it	possible
	  to erase individual elements while iterating through the container.)

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) Iterator	following the last removed element.
	  3,4) Number of elements removed (0 or	1).

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

Complexity
	  Given	an instance c of unordered_set:

	  1) Average case: constant, worst case: c.size()
	  2) Average case: std::distance(first,	last), worst case: c.size()
	  3) Average case: c.count(key), worst case: c.size()
	  4) Average case: c.count(x), worst case: c.size()

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

Example
       // Run this code

	#include <unordered_set>
	#include <iostream>
	int main()
	{
	    std::unordered_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();
	}

Possible 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
	  LWG  2356  C++11	the order of element that are not erased   re-
       quired to be
			      was unspecified				  pre-
       served

See also
	  clear	  clears the contents
	  (C++11) (public member function)

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

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

home | help