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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::unordered_set - std::unordered_set

Synopsis
	  Defined in header <unordered_set>
	  template<

	      class Key,
	      class		Hash		 =	       std::hash<Key>,
       (1) (since C++11)
	      class KeyEqual = std::equal_to<Key>,
	      class Allocator =	std::allocator<Key>

	  > class unordered_set;
	  namespace pmr	{

	      template<
		  class	Key,
		  class	Hash = std::hash<Key>,
		  class		 Pred		=	    std::equal_to<Key>
       (2) (since C++17)
	      >	using unordered_set = std::unordered_set<Key, Hash, Pred,

	  std::pmr::polymorphic_allocator<Key>>;

	  }

	  std::unordered_set  is  an associative container that	contains a set
       of unique objects
	  of type Key. Search, insertion, and removal have  average  constant-
       time complexity.

	  Internally, the elements are not sorted in any particular order, but
       organized into
	  buckets.  Which bucket an element is placed into depends entirely on
       the hash	of its
	  value. This allows fast access to individual elements, since once  a
       hash is
	  computed, it refers to the exact bucket the element is placed	into.

	  Container elements may not be	modified (even by non const iterators)
       since
	  modification	could  change  an  element's hash and corrupt the con-
       tainer.

	  std::unordered_set meets  the	 requirements  of  Container,  Alloca-
       torAwareContainer,
	  UnorderedAssociativeContainer.

Notes
	    * The swap functions do not	invalidate any of the iterators	inside
       the container,
	      but  they	do invalidate the iterator marking the end of the swap
       region.
	    * References and pointers to data stored in	the container are only
       invalidated by
	      erasing that element, even when the  corresponding  iterator  is
       invalidated.
	    * After container move assignment, unless elementwise move assign-
       ment is forced by
	      incompatible  allocators,	 references,  pointers,	 and iterators
       (other than the
	      past-the-end iterator) to	moved-from container remain valid, but
       refer to
	      elements that are	now in *this.

Template parameters
	   This	section	is incomplete
	   Reason: Add descriptions of the template parameters.

Member types
	  Member type		   Definition
	  key_type		   Key
	  value_type		   Key
	  size_type		   Unsigned integer type (usually std::size_t)
	  difference_type	      Signed	 integer     type     (usually
       std::ptrdiff_t)
	  hasher		   Hash
	  key_equal		   KeyEqual
	  allocator_type	   Allocator
	  reference		   value_type&
	  const_reference	   const value_type&
	  pointer		   std::allocator_traits<Allocator>::pointer
	  const_pointer				 std::allocator_traits<Alloca-
       tor>::const_pointer
	  iterator		      Constant	  LegacyForwardIterator	    to
       value_type
	  const_iterator	   LegacyForwardIterator to const value_type
				   An  iterator	 type  whose  category,	value,
       difference, pointer
				   and
	  local_iterator	   reference types are the same	 as  iterator.
       This iterator
				   can	be  used  to  iterate through a	single
       bucket but not
				   across buckets
				   An iterator	type  whose  category,	value,
       difference, pointer
				   and
	  const_local_iterator	   reference types are the same	as const_iter-
       ator. This
				   iterator
				   can	be  used  to  iterate through a	single
       bucket but not
				   across buckets
	  node_type (since C++17)  a specialization of node handle  represent-
       ing a container
				   node
				   type	 describing  the result	of inserting a
       node_type, a
				   specialization of

				   template<class Iter,	class NodeType>
				   struct /*unspecified*/
	  insert_return_type	   {
	  (since C++17)		       Iter	position;
				       bool	inserted;
				       NodeType	node;
				   };
				   instantiated	with template arguments	itera-
       tor and
				   node_type.

Member functions
	  constructor	    constructs the unordered_set
			    (public member function)
	  destructor	    destructs the unordered_set
			    (public member function)
	  operator=	    assigns values to the container
			    (public member function)
	  get_allocator	    returns the	associated allocator
			    (public member function)

Iterators
	  begin		    returns an iterator	to the beginning
	  cbegin	    (public member function)
	  end		    returns an iterator	to the end
	  cend		    (public member function)

Capacity
	  empty		    checks whether the container is empty
			    (public member function)
	  size		    returns the	number of elements
			    (public member function)
	  max_size	    returns the	maximum	possible number	of elements
			    (public member function)

Modifiers
	  clear		    clears the contents
			    (public member function)
			    inserts elements
	  insert	    or nodes
			    (since C++17)
			    (public member function)
	  insert_range	    inserts a range of elements
	  (C++23)	    (public member function)
	  emplace	    constructs element in-place
			    (public member function)
	  emplace_hint	    constructs elements	in-place using a hint
			    (public member function)
	  erase		    erases elements
			    (public member function)
	  swap		    swaps the contents
			    (public member function)
	  extract	    extracts nodes from	the container
	  (C++17)	    (public member function)
	  merge		    splices nodes from another container
	  (C++17)	    (public member function)

Lookup
	  count		    returns the	number of elements  matching  specific
       key
			    (public member function)
	  find		    finds element with specific	key
			    (public member function)
	  contains	    checks if the container contains element with spe-
       cific key
	  (C++20)	    (public member function)
	  equal_range	    returns range of elements matching a specific key
			    (public member function)

Bucket interface
	  begin(size_type)  returns an iterator	to the beginning of the	speci-
       fied bucket
	  cbegin(size_type) (public member function)
	  end(size_type)     returns  an  iterator to the end of the specified
       bucket
	  cend(size_type)   (public member function)
	  bucket_count	    returns the	number of buckets
			    (public member function)
	  max_bucket_count  returns the	maximum	number of buckets
			    (public member function)
	  bucket_size	    returns the	number of elements in specific bucket
			    (public member function)
	  bucket	    returns the	bucket for specific key
			    (public member function)

Hash policy
	  load_factor	    returns average number of elements per bucket
			    (public member function)
	  max_load_factor   manages maximum average  number  of	 elements  per
       bucket
			    (public member function)
			    reserves  at least the specified number of buckets
       and regenerates
	  rehash	    the	hash table
			    (public member function)
			    reserves space for at least	the  specified	number
       of elements and
	  reserve	    regenerates	the hash table
			    (public member function)

Observers
	  hash_function	    returns function used to hash the keys
			    (public member function)
	  key_eq	     returns  the  function  used  to compare keys for
       equality
			    (public member function)

Non-member functions
	  operator==
	  operator!=			 compares  the	values	in   the   un-
       ordered_set
	  (C++11)			(function template)
	  (C++11)(removed in C++20)
	  std::swap(std::unordered_set)	specializes the	std::swap algorithm
	  (C++11)			(function template)
	  erase_if(std::unordered_set)	 erases	 all  elements satisfying spe-
       cific criteria
	  (C++20)			(function template)

	    Deduction guides (since C++17)

Notes
	  The member types iterator and	const_iterator may be aliases  to  the
       same type. This
	  means	 defining  a pair of function overloads	using the two types as
       parameter types
	  may violate the One Definition Rule. Since iterator  is  convertible
       to
	  const_iterator, a single function with a const_iterator as parameter
       type will work
	  instead.

	      Feature-test macro       Value	Std		      Feature
	  __cpp_lib_containers_ranges  202202L (C++23) Ranges construction and
       insertion for
						      containers

Example
       // Run this code

	#include <iostream>
	#include <unordered_set>

	void print(const auto& set)
	{
	    for	(const auto& elem : set)
		std::cout << elem << ' ';
	    std::cout << '\n';
	}

	int main()
	{
	    std::unordered_set<int> mySet{2, 7,	1, 8, 2, 8}; //	creates	a  set
       of ints
	    print(mySet);

	    mySet.insert(5); //	puts an	element	5 in the set
	    print(mySet);

	    if (auto iter = mySet.find(5); iter	!= mySet.end())
		mySet.erase(iter); // removes an element pointed to by iter
	    print(mySet);

	    mySet.erase(7); // removes an element 7
	    print(mySet);
	}

Possible output:
	8 1 7 2
	5 8 1 7	2
	8 1 7 2
	8 1 2

	  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 definitions of reference,
	  LWG  2050  C++11	const_reference, pointer		 based
       on value_type and
			      and     const_pointer	were	 based	    on
       std::allocator_traits
			      allocator_type

See also
	  set collection of unique keys, sorted	by keys
	      (class template)

Category:
	    * Todo with	reason

http://cppreference.com		  2024.06.10		 std::unordered_set(3)

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

home | help