Compartir a través de


unordered_set Class

 

The latest version of this topic can be found at unordered_set Class.

The template class describes an object that controls a varying-length sequence of elements of typeconst Key. The sequence is weakly ordered by a hash function, which partitions the sequence into an ordered set of subsequences called buckets. Within each bucket a comparison function determines whether any pair of elements has equivalent ordering. Each element serves as both a sort key and a value. The sequence is represented in a way that permits lookup, insertion, and removal of an arbitrary element with a number of operations that can be independent of the number of elements in the sequence (constant time), at least when all buckets are of roughly equal length. In the worst case, when all of the elements are in one bucket, the number of operations is proportional to the number of elements in the sequence (linear time). Moreover, inserting an element invalidates no iterators, and removing an element invalidates only those iterators which point at the removed element.

Syntax

 
template <class Key,  
class Hash = std::hash<Key>,  
class Pred = std::equal_to<Key>,  
class Alloc = std::allocator<Key>>  
class unordered_set;  

Parameters

Parameter Description
Key The key type.
Hash The hash function object type.
Pred The equality comparison function object type.
Alloc The allocator class.

Members

Type Definition Description
unordered_set::allocator_type The type of an allocator for managing storage.
unordered_set::const_iterator The type of a constant iterator for the controlled sequence.
unordered_set::const_local_iterator The type of a constant bucket iterator for the controlled sequence.
unordered_set::const_pointer The type of a constant pointer to an element.
unordered_set::const_reference The type of a constant reference to an element.
unordered_set::difference_type The type of a signed distance between two elements.
unordered_set::hasher The type of the hash function.
unordered_set::iterator The type of an iterator for the controlled sequence.
unordered_set::key_equal The type of the comparison function.
unordered_set::key_type The type of an ordering key.
unordered_set::local_iterator The type of a bucket iterator for the controlled sequence.
unordered_set::pointer The type of a pointer to an element.
unordered_set::reference The type of a reference to an element.
unordered_set::size_type The type of an unsigned distance between two elements.
unordered_set::value_type The type of an element.
Member Function Description
unordered_set::begin Designates the beginning of the controlled sequence.
unordered_set::bucket Gets the bucket number for a key value.
unordered_set::bucket_count Gets the number of buckets.
unordered_set::bucket_size Gets the size of a bucket.
unordered_set::cbegin Designates the beginning of the controlled sequence.
unordered_set::cend Designates the end of the controlled sequence.
unordered_set::clear Removes all elements.
unordered_set::count Finds the number of elements matching a specified key.
unordered_set::emplace Adds an element constructed in place.
unordered_set::emplace_hint Adds an element constructed in place, with hint.
unordered_set::empty Tests whether no elements are present.
unordered_set::end Designates the end of the controlled sequence.
unordered_set::equal_range Finds range that matches a specified key.
unordered_set::erase Removes elements at specified positions.
unordered_set::find Finds an element that matches a specified key.
unordered_set::get_allocator Gets the stored allocator object.
unordered_set::hash_function Gets the stored hash function object.
unordered_set::insert Adds elements.
unordered_set::key_eq Gets the stored comparison function object.
unordered_set::load_factor Counts the average elements per bucket.
unordered_set::max_bucket_count Gets the maximum number of buckets.
unordered_set::max_load_factor Gets or sets the maximum elements per bucket.
unordered_set::max_size Gets the maximum size of the controlled sequence.
unordered_set::rehash Rebuilds the hash table.
unordered_set::size Counts the number of elements.
unordered_set::swap Swaps the contents of two containers.
unordered_set::unordered_set Constructs a container object.
Operators Description
unordered_set::operator= Copies a hash table.

Remarks

The object orders the sequence it controls by calling two stored objects, a comparison function object of typeunordered_set::key_equal and a hash function object of typeunordered_set::hasher. You access the first stored object by calling the member functionunordered_set::key_eq(); and you access the second stored object by calling the member functionunordered_set::hash_function(). Specifically, for all valuesX andY of typeKey, the callkey_eq()(X, Y) returns true only if the two argument values have equivalent ordering; the callhash_function()(keyval) yields a distribution of values of typesize_t. Unlike template classunordered_multiset Class, an object of template classunordered_set ensures thatkey_eq()(X, Y) is always false for any two elements of the controlled sequence. (Keys are unique.)

The object also stores a maximum load factor, which specifies the maximum desired average number of elements per bucket. If inserting an element causesunordered_set::load_factor() to exceed the maximum load factor, the container increases the number of buckets and rebuilds the hash table as needed.

The actual order of elements in the controlled sequence depends on the hash function, the comparison function, the order of insertion, the maximum load factor, and the current number of buckets. You cannot in general predict the order of elements in the controlled sequence. You can always be assured, however, that any subset of elements that have equivalent ordering are adjacent in the controlled sequence.

The object allocates and frees storage for the sequence it controls through a stored allocator object of typeunordered_set::allocator_type. Such an allocator object must have the same external interface as an object of template classallocator. Note that the stored allocator object is not copied when the container object is assigned.

Requirements

Header: <unordered_set>

Namespace: std

unordered_set::allocator_type

The type of an allocator for managing storage.

typedef Alloc allocator_type;  

Remarks

The type is a synonym for the template parameterAlloc.

Example

Â

  
// std_tr1__unordered_set__unordered_set_allocator_type.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
typedef std::allocator<std::pair<const char, int> > Myalloc;  
int main()  
{  
Myset c1;  
  
Myset::allocator_type al = c1.get_allocator();  
std::cout << "al == std::allocator() is "  
<< std::boolalpha << (al == Myalloc()) << std::endl;  
  
return (0);  
}  
  
al == std::allocator() is true  

unordered_set::begin

Designates the beginning of the controlled sequence or a bucket.

 
iterator begin();

const_iterator begin() const;

 
local_iterator begin(size_type nbucket);

const_local_iterator begin(size_type nbucket) const;

Parameters

Parameter Description
nbucket The bucket number.

Remarks

The first two member functions return a forward iterator that points at the first element of the sequence (or just beyond the end of an empty sequence). The last two member functions return a forward iterator that points at the first element of bucketnbucket (or just beyond the end of an empty bucket).

Example

  
// unordered_set_begin.cpp  
// compile using: cl.exe /EHsc /nologo /W4 /MTd  
#include <unordered_set>  
#include <iostream>  
  
using namespace std;  
  
typedef unordered_set<char> MySet;  
  
int main()  
{  
MySet c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents using range-based for  
for (auto it : c1) {  
cout << " [" << it << "]";  
}  
  
cout << endl;  
  
// display contents using explicit for  
for (MySet::const_iterator it = c1.begin(); it != c1.end(); ++it) {  
cout << " [" << *it << "]";  
}  
  
cout << std::endl;  
  
// display first two items  
MySet::iterator it2 = c1.begin();  
cout << " [" << *it2 << "]";  
++it2;  
cout << " [" << *it2 << "]";  
cout << endl;  
  
// display bucket containing 'a'  
MySet::const_local_iterator lit = c1.begin(c1.bucket('a'));  
cout << " [" << *lit << "]";  
  
return (0);  
}  
  
  
[a] [b] [c]                                   
  
[a] [b] [c]                                  
  
[a] [b]                                   
  
[a]  
  

unordered_set::bucket

Gets the bucket number for a key value.

size_type bucket(const Key& keyval) const;

Parameters

keyval
The key value to map.

Remarks

The member function returns the bucket number currently corresponding to the key valuekeyval.

Example

Â

  
// std_tr1__unordered_set__unordered_set_bucket.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// display buckets for keys  
Myset::size_type bs = c1.bucket('a');  
std::cout << "bucket('a') == " << bs << std::endl;  
std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)  
<< std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket('a') == 7  
bucket_size(7) == 1  

unordered_set::bucket_count

Gets the number of buckets.

size_type bucket_count() const;

Remarks

The member function returns the current number of buckets.

Example

Â

  
// std_tr1__unordered_set__unordered_set_bucket_count.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect current parameters  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// change max_load_factor and redisplay  
c1.max_load_factor(0.10f);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// rehash and redisplay  
c1.rehash(100);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 4  
  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 0.1  
  
bucket_count
() == 128  
load_factor
() == 0.0234375  
max_bucket_count
() == 128  
max_load_factor
() == 0.1  

unordered_set::bucket_size

Gets the size of a bucket

size_type bucket_size(size_type nbucket) const;

Parameters

nbucket
The bucket number.

Remarks

The member functions returns the size of bucket numbernbucket.

Example

Â

  
// std_tr1__unordered_set__unordered_set_bucket_size.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// display buckets for keys  
Myset::size_type bs = c1.bucket('a');  
std::cout << "bucket('a') == " << bs << std::endl;  
std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)  
<< std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket('a') == 7  
bucket_size(7) == 1  

unordered_set::cbegin

Returns aconst iterator that addresses the first element in the range.

const_iterator cbegin() const;

Return Value

Aconst forward-access iterator that points at the first element of the range, or the location just beyond the end of an empty range (for an empty range, cbegin() == cend()).

Remarks

With the return value ofcbegin, the elements in the range cannot be modified.

You can use this member function in place of thebegin() member function to guarantee that the return value isconst_iterator. Typically, it's used in conjunction with theauto type deduction keyword, as shown in the following example. In the example, considerContainer to be a modifiable (non- const) container of any kind that supportsbegin() andcbegin().

 
auto i1 = Container.begin();
// i1 isContainer<T>::iterator  
auto i2 = Container.cbegin();

// i2 isContainer<T>::const_iterator  

unordered_set::cend

Returns aconst iterator that addresses the location just beyond the last element in a range.

const_iterator cend() const;

Return Value

Aconst forward-access iterator that points just beyond the end of the range.

Remarks

cend is used to test whether an iterator has passed the end of its range.

You can use this member function in place of theend() member function to guarantee that the return value isconst_iterator. Typically, it's used in conjunction with theauto type deduction keyword, as shown in the following example. In the example, considerContainer to be a modifiable (non- const) container of any kind that supportsend() andcend().

 
auto i1 = Container.end();
// i1 isContainer<T>::iterator  
auto i2 = Container.cend();

// i2 isContainer<T>::const_iterator  

The value returned bycend should not be dereferenced.

unordered_set::clear

Removes all elements.

void clear();

Remarks

The member function callsunordered_set::erase( unordered_set::begin(), unordered_set::end()).

Example

Â

  
// std_tr1__unordered_set__unordered_set_clear.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// clear the container and reinspect  
c1.clear();  
std::cout << "size == " << c1.size() << std::endl;  
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;  
std::cout << std::endl;  
  
c1.insert('d');  
c1.insert('e');  
  
// display contents " [e] [d]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
std::cout << "size == " << c1.size() << std::endl;  
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
size == 0  
empty() == true  
  
[e] [d]  
size == 2  
empty() == false  

unordered_set::const_iterator

The type of a constant iterator for the controlled sequence.

typedef T1 const_iterator;  

Remarks

The type describes an object that can serve as a constant forward iterator for the controlled sequence. It is described here as a synonym for the implementation-defined typeT1.

Example

Â

  
// std_tr1__unordered_set__unordered_set_const_iterator.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
return (0);  
}  
  
[c] [b] [a]  

unordered_set::const_local_iterator

The type of a constant bucket iterator for the controlled sequence.

typedef T5 const_local_iterator;  

Remarks

The type describes an object that can serve as a constant forward iterator for a bucket. It is described here as a synonym for the implementation-defined typeT5.

Example

Â

  
// std_tr1__unordered_set__unordered_set_const_local_iterator.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect bucket containing 'a'  
Myset::const_local_iterator lit = c1.begin(c1.bucket('a'));  
std::cout << " [" << *lit << "]";  
  
return (0);  
}  
  
  
[c] [b] [a]  
[a]  
  

unordered_set::const_pointer

The type of a constant pointer to an element.

typedef Alloc::const_pointer const_pointer;  

Remarks

The type describes an object that can serve as a constant pointer to an element of the controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_const_pointer.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::iterator it = c1.begin();  
it != c1.end(); ++it)  
{  
Myset::const_pointer p = &*it;  
std::cout << " [" << *p << "]";  
}  
std::cout << std::endl;  
  
return (0);  
}  
  
[c] [b] [a]  

unordered_set::const_reference

The type of a constant reference to an element.

typedef Alloc::const_reference const_reference;  

Remarks

The type describes an object that can serve as a constant reference to an element of the controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_const_reference.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::iterator it = c1.begin();  
it != c1.end(); ++it)  
{  
Myset::const_reference ref = *it;  
std::cout << " [" << ref << "]";  
}  
std::cout << std::endl;  
  
return (0);  
}  
  
[c] [b] [a]  

unordered_set::count

Finds the number of elements matching a specified key.

size_type count(const Key& keyval) const;

Parameters

keyval
Key value to search for.

Remarks

The member function returns the number of elements in the range delimited byunordered_set::equal_range(keyval).

Example

Â

  
// std_tr1__unordered_set__unordered_set_count.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
std::cout << "count('A') == " << c1.count('A') << std::endl;  
std::cout << "count('b') == " << c1.count('b') << std::endl;  
std::cout << "count('C') == " << c1.count('C') << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
count
('A') == 0  
count
('b') == 1  
count
('C') == 0  

unordered_set::difference_type

The type of a signed distance between two elements.

typedef T3 difference_type;  

Remarks

The signed integer type describes an object that can represent the difference between the addresses of any two elements in the controlled sequence. It is described here as a synonym for the implementation-defined typeT3.

Example

Â

  
// std_tr1__unordered_set__unordered_set_difference_type.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// compute positive difference  
Myset::difference_type diff = 0;  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
++diff;  
std::cout << "end()-begin() == " << diff << std::endl;  
  
// compute negative difference  
diff = 0;  
for (Myset::const_iterator it = c1.end();  
it != c1.begin(); --it)  
--diff;  
std::cout << "begin()-end() == " << diff << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
end
()-begin
() == 3  
begin
()-end
() == -3  

unordered_set::emplace

Inserts an element constructed in place (no copy or move operations are performed).

 
template <class... Args>  
pair<iterator, bool>  
emplace(
Args&&... args);

Parameters

Parameter Description
args The arguments forwarded to construct an element to be inserted into the unordered_set unless it already contains an element whose value is equivalently ordered.

Return Value

Apair whosebool component returns true if an insertion was made and false if theunordered_set already contained an element whose key had an equivalent value in the ordering, and whose iterator component returns the address where a new element was inserted or where the element was already located.

To access the iterator component of a pairpr returned by this member function, usepr.first, and to dereference it, use*(pr.first). To access thebool component of a pairpr returned by this member function, usepr.second.

Remarks

No iterators or references are invalidated by this function.

During the insertion, if an exception is thrown but does not occur in the container's hash function, the container is not modified. If the exception is thrown in the hash function, the result is undefined.

For a code example, seeset::emplace.

unordered_set::emplace_hint

Inserts an element constructed in place (no copy or move operations are performed), with a placement hint.

 
template <class... Args>  
iterator emplace_hint(
const_iteratorwhere,  
Args&&... args);

Parameters

Parameter Description
args The arguments forwarded to construct an element to be inserted into the unordered_set unless the unordered_set already contains that element or, more generally, unless it already contains an element whose key is equivalently ordered.
where A hint regarding the place to start searching for the correct point of insertion.

Return Value

An iterator to the newly inserted element.

If the insertion failed because the element already exists, returns an iterator to the existing element.

Remarks

No iterators or references are invalidated by this function.

During the insertion, if an exception is thrown but does not occur in the container's hash function, the container is not modified. If the exception is thrown in the hash function, the result is undefined.

For a code example, seeset::emplace_hint.

unordered_set::empty

Tests whether no elements are present.

bool empty() const;

Remarks

The member function returns true for an empty controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_empty.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// clear the container and reinspect  
c1.clear();  
std::cout << "size == " << c1.size() << std::endl;  
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;  
std::cout << std::endl;  
  
c1.insert('d');  
c1.insert('e');  
  
// display contents " [e] [d]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
std::cout << "size == " << c1.size() << std::endl;  
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
size == 0  
empty() == true  
  
[e] [d]  
size == 2  
empty() == false  

unordered_set::end

Designates the end of the controlled sequence.

 
iterator end();

const_iterator end() const;

 
local_iterator end(size_type nbucket);

const_local_iterator end(size_type nbucket) const;

Parameters

Parameter Description
nbucket The bucket number.

Remarks

The first two member functions return a forward iterator that points just beyond the end of the sequence. The last two member functions return a forward iterator that points just beyond the end of bucketnbucket.

Example

  
// std_tr1__unordered_set__unordered_set_end.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect last two items " [a] [b]"  
Myset::iterator it2 = c1.end();  
--it2;  
std::cout << " [" << *it2 << "]";  
--it2;  
std::cout << " [" << *it2 << "]";  
std::cout << std::endl;  
  
// inspect bucket containing 'a'  
Myset::const_local_iterator lit = c1.end(c1.bucket('a'));  
--lit;  
std::cout << " [" << *lit << "]";  
  
return (0);  
}  
  
  
[c] [b] [a]  
[a] [b]  
[a]  
  

unordered_set::equal_range

Finds range that matches a specified key.

 
std::pair<iterator, iterator>  
equal_range(const Key& keyval);

std::pair<const_iterator, const_iterator>  
equal_range(const Key& keyval) const;

Parameters

keyval
Key value to search for.

Remarks

The member function returns a pair of iteratorsX such that[X.first, X.second) delimits just those elements of the controlled sequence that have equivalent ordering withkeyval. If no such elements exist, both iterators areend().

Example

Â

  
// std_tr1__unordered_set__unordered_set_equal_range.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// display results of failed search  
std::pair<Myset::iterator, Myset::iterator> pair1 =  
c1.equal_range('x');  
std::cout << "equal_range('x'):";  
for (; pair1.first != pair1.second; ++pair1.first)  
std::cout << " [" << *pair1.first << "]";  
std::cout << std::endl;  
  
// display results of successful search  
pair1 = c1.equal_range('b');  
std::cout << "equal_range('b'):";  
for (; pair1.first != pair1.second; ++pair1.first)  
std::cout << " [" << *pair1.first << "]";  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
equal_range('x'):  
equal_range('b'): [b]  
  

unordered_set::erase

Removes an element or a range of elements in a unordered_set from specified positions or removes elements that match a specified key.

 
iterator erase(const_iteratorWhere);

iterator erase(
const_iteratorFirst, const_iteratorLast);

size_type erase(
const key_type& Key);

Parameters

Where
Position of the element to be removed.

First
Position of the first element to be removed.

Last
Position just beyond the last element to be removed.

Key
The key value of the elements to be removed.

Return Value

For the first two member functions, a bidirectional iterator that designates the first element remaining beyond any elements removed, or an element that is the end of the unordered_set if no such element exists.

For the third member function, returns the number of elements that have been removed from the unordered_set.

Remarks

For a code example, seeset::erase.

unordered_set::find

Finds an element that matches a specified key.

const_iterator find(const Key& keyval) const;

Parameters

keyval
Key value to search for.

Remarks

The member function returnsunordered_set::equal_range(keyval).first.

Example

Â

  
// std_tr1__unordered_set__unordered_set_find.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// try to find and fail  
std::cout << "find('A') == "  
<< std::boolalpha << (c1.find('A') != c1.end()) << std::endl;  
  
// try to find and succeed  
Myset::iterator it = c1.find('b');  
std::cout << "find('b') == "  
<< std::boolalpha << (it != c1.end())  
<< ": [" << *it << "]" << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
find('A') == false  
find('b') == true: [b]  
  

unordered_set::get_allocator

Gets the stored allocator object.

Alloc get_allocator() const;

Remarks

The member function returns the stored allocator object.

Example

Â

  
// std_tr1__unordered_set__unordered_set_get_allocator.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
typedef std::allocator<std::pair<const char, int> > Myalloc;  
int main()  
{  
Myset c1;  
  
Myset::allocator_type al = c1.get_allocator();  
std::cout << "al == std::allocator() is "  
<< std::boolalpha << (al == Myalloc()) << std::endl;  
  
return (0);  
}  
  
al == std::allocator() is true  

unordered_set::hash_function

Gets the stored hash function object.

Hash hash_function() const;

Remarks

The member function returns the stored hash function object.

Example

Â

  
// std_tr1__unordered_set__unordered_set_hash_function.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
Myset::hasher hfn = c1.hash_function();  
std::cout << "hfn('a') == " << hfn('a') << std::endl;  
std::cout << "hfn('b') == " << hfn('b') << std::endl;  
  
return (0);  
}  
  
  
hfn
('a') == 1630279  
hfn
('b') == 1647086  

unordered_set::hasher

The type of the hash function.

typedef Hash hasher;  

Remarks

The type is a synonym for the template parameterHash.

Example

Â

  
// std_tr1__unordered_set__unordered_set_hasher.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
Myset::hasher hfn = c1.hash_function();  
std::cout << "hfn('a') == " << hfn('a') << std::endl;  
std::cout << "hfn('b') == " << hfn('b') << std::endl;  
  
return (0);  
}  
  
  
hfn
('a') == 1630279  
hfn
('b') == 1647086  

unordered_set::insert

Inserts an element or a range of elements into an unordered_set.

 
// (1) single element  
pair<iterator, bool> insert(
const value_type& Val);

 
// (2) single element, perfect forwarded  
template <class ValTy>  
pair<iterator, bool>  
insert(
ValTy&& Val);

 
// (3) single element with hint  
iterator insert(
const_iterator Where,  
const value_type& Val);

 
// (4) single element, perfect forwarded, with hint  
template <class ValTy>  
iterator insert(
const_iterator Where,  
ValTy&& Val);

 
// (5) range  
template <class InputIterator>  
void insert(
InputIterator First,  
InputIterator Last);

 
// (6) initializer list  
void insert(
initializer_list<value_type>  
IList);

Parameters

Parameter Description
Val The value of an element to be inserted into the unordered_set unless it already contains an element whose key is equivalently ordered.
Where The place to start searching for the correct point of insertion.
ValTy Template parameter that specifies the argument type that the unordered_set can use to construct an element ofvalue_type, and perfect-forwardsVal as an argument.
First The position of the first element to be copied.
Last The position just beyond the last element to be copied.
InputIterator Template function argument that meets the requirements of aninput iterator that points to elements of a type that can be used to constructvalue_type objects.
IList Theinitializer_list from which to copy the elements.

Return Value

The single-element member functions, (1) and (2), return apair whosebool component is true if an insertion was made, and false if the unordered_set already contained an element whose key had an equivalent value in the ordering. The iterator component of the return-value pair points to the newly inserted element if thebool component is true, or to the existing element if thebool component is false.

The single-element-with-hint member functions, (3) and (4), return an iterator that points to the position where the new element was inserted into the unordered_set or, if an element with an equivalent key already exists, to the existing element.

Remarks

No iterators, pointers, or references are invalidated by this function.

During the insertion of just one element, if an exception is thrown but does not occur in the container's hash function, the container's state is not modified. If the exception is thrown in the hash function, the result is undefined. During the insertion of multiple elements, if an exception is thrown, the container is left in an unspecified but valid state.

To access the iterator component of apair``pr that's returned by the single-element member functions, usepr.first; to dereference the iterator within the returned pair, use*pr.first, giving you an element. To access thebool component, usepr.second. For an example, see the sample code later in this article.

Thevalue_type of a container is a typedef that belongs to the container, and, for set, unordered_set<V>::value_type is typeconst V.

The range member function (5) inserts the sequence of element values into an unordered_set that corresponds to each element addressed by an iterator in the range[First, Last); therefore, Last does not get inserted. The container member functionend() refers to the position just after the last element in the container—for example, the statements.insert(v.begin(), v.end()); attempts to insert all elements ofv intos. Only elements that have unique values in the range are inserted; duplicates are ignored. To observe which elements are rejected, use the single-element versions ofinsert.

The initializer list member function (6) uses aninitializer_list to copy elements into the unordered_set.

For insertion of an element constructed in place—that is, no copy or move operations are performed—seeset::emplace andset::emplace_hint.

For a code example, seeset::insert.

unordered_set::iterator

A type that provides a constantforward iterator that can read elements in an unordered_set.

typedef implementation-defined iterator;  

Example

See the example forbegin for an example of how to declare and use aniterator.

unordered_set::key_eq

Gets the stored comparison function object.

Pred key_eq() const;

Remarks

The member function returns the stored comparison function object.

Example

Â

  
// std_tr1__unordered_set__unordered_set_key_eq.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
Myset::key_equal cmpfn = c1.key_eq();  
std::cout << "cmpfn('a', 'a') == "  
<< std::boolalpha << cmpfn('a', 'a') << std::endl;  
std::cout << "cmpfn('a', 'b') == "  
<< std::boolalpha << cmpfn('a', 'b') << std::endl;  
  
return (0);  
}  
  
  
cmpfn
('a', 'a') == true  
cmpfn
('a', 'b') == false  

unordered_set::key_equal

The type of the comparison function.

typedef Pred key_equal;  

Remarks

The type is a synonym for the template parameterPred.

Example

Â

  
// std_tr1__unordered_set__unordered_set_key_equal.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
Myset::key_equal cmpfn = c1.key_eq();  
std::cout << "cmpfn('a', 'a') == "  
<< std::boolalpha << cmpfn('a', 'a') << std::endl;  
std::cout << "cmpfn('a', 'b') == "  
<< std::boolalpha << cmpfn('a', 'b') << std::endl;  
  
return (0);  
}  
  
  
cmpfn
('a', 'a') == true  
cmpfn
('a', 'b') == false  

unordered_set::key_type

The type of an ordering key.

typedef Key key_type;  

Remarks

The type is a synonym for the template parameterKey.

Example

Â

  
// std_tr1__unordered_set__unordered_set_key_type.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// add a value and reinspect  
Myset::key_type key = 'd';  
Myset::value_type val = key;  
c1.insert(val);  
  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
[d] [c] [b] [a]  
  

unordered_set::load_factor

Counts the average elements per bucket.

float load_factor() const;

Remarks

The member function returns(float)unordered_set::size() / (float)unordered_set::bucket_count(), the average number of elements per bucket.

Example

Â

  
// std_tr1__unordered_set__unordered_set_load_factor.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect current parameters  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// change max_load_factor and redisplay  
c1.max_load_factor(0.10f);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// rehash and redisplay  
c1.rehash(100);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 4  
  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 0.1  
  
bucket_count
() == 128  
load_factor
() == 0.0234375  
max_bucket_count
() == 128  
max_load_factor
() == 0.1  

unordered_set::local_iterator

The type of a bucket iterator.

typedef T4 local_iterator;  

Remarks

The type describes an object that can serve as a forward iterator for a bucket. It is described here as a synonym for the implementation-defined typeT4.

Example

Â

  
// std_tr1__unordered_set__unordered_set_local_iterator.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect bucket containing 'a'  
Myset::local_iterator lit = c1.begin(c1.bucket('a'));  
std::cout << " [" << *lit << "]";  
  
return (0);  
}  
  
  
[c] [b] [a]  
[a]  
  

unordered_set::max_bucket_count

Gets the maximum number of buckets.

size_type max_bucket_count() const;

Remarks

The member function returns the maximum number of buckets currently permitted.

Example

Â

  
// std_tr1__unordered_set__unordered_set_max_bucket_count.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect current parameters  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// change max_load_factor and redisplay  
c1.max_load_factor(0.10f);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// rehash and redisplay  
c1.rehash(100);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 4  
  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 0.1  
  
bucket_count
() == 128  
load_factor
() == 0.0234375  
max_bucket_count
() == 128  
max_load_factor
() == 0.1  

unordered_set::max_load_factor

Gets or sets the maximum elements per bucket.

 
float max_load_factor() const;

 
void max_load_factor(float factor);

Parameters

factor
The new maximum load factor.

Remarks

The first member function returns the stored maximum load factor. The second member function replaces the stored maximum load factor withfactor.

Example

Â

  
// std_tr1__unordered_set__unordered_set_max_load_factor.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect current parameters  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// change max_load_factor and redisplay  
c1.max_load_factor(0.10f);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// rehash and redisplay  
c1.rehash(100);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_bucket_count() == "  
<< c1.max_bucket_count() << std::endl;  
std::cout << "max_load_factor() == "  
<< c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 4  
  
bucket_count
() == 8  
load_factor
() == 0.375  
max_bucket_count
() == 8  
max_load_factor
() == 0.1  
  
bucket_count
() == 128  
load_factor
() == 0.0234375  
max_bucket_count
() == 128  
max_load_factor
() == 0.1  

unordered_set::max_size

Gets the maximum size of the controlled sequence.

size_type max_size() const;

Remarks

The member function returns the length of the longest sequence that the object can control.

Example

Â

  
// std_tr1__unordered_set__unordered_set_max_size.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
std::cout << "max_size() == " << c1.max_size() << std::endl;  
  
return (0);  
}  
  
max_size
() == 4294967295  

unordered_set::operator=

Copies a hash table.

 
unordered_set& operator=(const unordered_set& right);

unordered_set& operator=(unordered_set&& right);

Parameters

Parameter Description
right Theunordered_set being copied into theunordered_set.

Remarks

After erasing any existing elements in anunordered_set, operator= either copies or moves the contents ofright into theunordered_set.

Example

  
// unordered_set_operator_as.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
int main( )  
{  
using namespace std;  
unordered_set<int> v1, v2, v3;  
unordered_set<int>::iterator iter;  
  
v1.insert(10);  
  
cout << "v1 = " ;  
for (iter = v1.begin(); iter != v1.end(); iter++)  
cout << *iter << " ";  
cout << endl;  
  
v2 = v1;  
cout << "v2 = ";  
for (iter = v2.begin(); iter != v2.end(); iter++)  
cout << *iter << " ";  
cout << endl;  
  
// move v1 into v2  
v2.clear();  
v2 = move(v1);  
cout << "v2 = ";  
for (iter = v2.begin(); iter != v2.end(); iter++)  
cout << *iter << " ";  
cout << endl;  
}  
  

unordered_set::pointer

The type of a pointer to an element.

typedef Alloc::pointer pointer;  

Remarks

The type describes an object that can serve as a pointer to an element of the controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_pointer.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::iterator it = c1.begin();  
it != c1.end(); ++it)  
{  
Myset::key_type key = *it;  
Myset::pointer p = &key;  
std::cout << " [" << *p << "]";  
}  
std::cout << std::endl;  
  
return (0);  
}  
  
[c] [b] [a]  

unordered_set::reference

The type of a reference to an element.

typedef Alloc::reference reference;  

Remarks

The type describes an object that can serve as a reference to an element of the controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_reference.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::iterator it = c1.begin();  
it != c1.end(); ++it)  
{  
Myset::key_type key = *it;  
Myset::reference ref = key;  
std::cout << " [" << ref << "]";  
}  
std::cout << std::endl;  
  
return (0);  
}  
  
[c] [b] [a]  

unordered_set::rehash

Rebuilds the hash table.

void rehash(size_type nbuckets);

Parameters

nbuckets
The requested number of buckets.

Remarks

The member function alters the number of buckets to be at leastnbuckets and rebuilds the hash table as needed.

Example

Â

  
// std_tr1__unordered_set__unordered_set_rehash.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// inspect current parameters  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// change max_load_factor and redisplay  
c1.max_load_factor(0.10f);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;  
std::cout << std::endl;  
  
// rehash and redisplay  
c1.rehash(100);  
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;  
std::cout << "load_factor() == " << c1.load_factor() << std::endl;  
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
bucket_count
() == 8  
load_factor
() == 0.375  
max_load_factor
() == 4  
  
bucket_count
() == 8  
load_factor
() == 0.375  
max_load_factor
() == 0.1  
  
bucket_count
() == 128  
load_factor
() == 0.0234375  
max_load_factor
() == 0.1  

unordered_set::size

Counts the number of elements.

size_type size() const;

Remarks

The member function returns the length of the controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_size.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// clear the container and reinspect  
c1.clear();  
std::cout << "size == " << c1.size() << std::endl;  
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;  
std::cout << std::endl;  
  
c1.insert('d');  
c1.insert('e');  
  
// display contents " [e] [d]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
std::cout << "size == " << c1.size() << std::endl;  
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
size == 0  
empty() == true  
  
[e] [d]  
size == 2  
empty() == false  

unordered_set::size_type

The type of an unsigned distance between two elements.

typedef T2 size_type;  

Remarks

The unsigned integer type describes an object that can represent the length of any controlled sequence. It is described here as a synonym for the implementation-defined typeT2.

Example

Â

  
// std_tr1__unordered_set__unordered_set_size_type.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
Myset::size_type sz = c1.size();  
  
std::cout << "size == " << sz << std::endl;  
  
return (0);  
}  
  
size == 0  

unordered_set::swap

Swaps the contents of two containers.

void swap(unordered_set& right);

Parameters

right
The container to swap with.

Remarks

The member function swaps the controlled sequences between*this andright. Ifunordered_set::get_allocator() == right.get_allocator(), it does so in constant time, it throws an exception only as a result of copying the stored traits object of typeTr, and it invalidates no references, pointers, or iterators that designate elements in the two controlled sequences. Otherwise, it performs a number of element assignments and constructor calls proportional to the number of elements in the two controlled sequences.

Example

Â

  
// std_tr1__unordered_set__unordered_set_swap.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
Myset c2;  
  
c2.insert('d');  
c2.insert('e');  
c2.insert('f');  
  
c1.swap(c2);  
  
// display contents " [f] [e] [d]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
swap(c1, c2);  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
[f] [e] [d]  
[c] [b] [a]  
  

unordered_set::unordered_set

Constructs a container object.

 
unordered_set(
const unordered_set& Right);

explicit unordered_set(
size_typebucket_count = N0,  
const Hash& Hash = Hash(),  
const Comp& Comp = Comp(),  
const Allocator& Al = Alloc());

unordered_set(
unordered_set&& Right);

unordered_set(
initializer_list<Type> IList);

unordered_set(
initializer_list<Type> IList, size_typebucket_count);

unordered_set(
initializer_list<Type> IList,  
size_typebucket_count,  
const Hash& Hash);

unordered_set(
initializer_list<Type> IList,  
size_typebucket_count,  
const Hash& Hash,  
const Comp& Comp);

unordered_set(
initializer_list<Type> IList,  
size_typebucket_count,  
const Hash& Hash,  
const Comp& Comp,  
const Allocator& Al);

template <class InputIterator>  
unordered_set(
InputIteratorfirst,  
InputIteratorlast,  
size_typebucket_count = N0,  
const Hash& Hash = Hash(),  
const Comp& Comp = Comp(),  
const Allocator& Al = Alloc());

Parameters

Parameter Description
InputIterator The iterator type.
Al The allocator object to store.
Comp The comparison function object to store.
Hash The hash function object to store.
bucket_count The minimum number of buckets.
Right The container to copy.
IList The initializer_list containing the elements to copy.

Remarks

The first constructor specifies a copy of the sequence controlled byRight. The second constructor specifies an empty controlled sequence. The third constructor specifies a copy of the sequence by movingRight The fourth through eighth constructors use an initializer_list to specify the elements to copy. The ninth constructor inserts the sequence of element values[first, last).

All constructors also initialize several stored values. For the copy constructor, the values are obtained fromRight. Otherwise:

The minimum number of buckets is the argumentbucket_count, if present; otherwise it is a default value described here as the implementation-defined valueN0.

The hash function object is the argumentHash, if present; otherwise it isHash().

The comparison function object is the argumentComp, if present; otherwise it isComp().

The allocator object is the argumentAl, if present; otherwise, it isAlloc().

unordered_set::value_type

The type of an element.

typedef Key value_type;  

Remarks

The type describes an element of the controlled sequence.

Example

Â

  
// std_tr1__unordered_set__unordered_set_value_type.cpp  
// compile with: /EHsc  
#include <unordered_set>  
#include <iostream>  
  
typedef std::unordered_set<char> Myset;  
int main()  
{  
Myset c1;  
  
c1.insert('a');  
c1.insert('b');  
c1.insert('c');  
  
// display contents " [c] [b] [a]"  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
// add a value and reinspect  
Myset::key_type key = 'd';  
Myset::value_type val = key;  
c1.insert(val);  
  
for (Myset::const_iterator it = c1.begin();  
it != c1.end(); ++it)  
std::cout << " [" << *it << "]";  
std::cout << std::endl;  
  
return (0);  
}  
  
  
[c] [b] [a]  
[d] [c] [b] [a]  
  

See Also

<unordered_set>
Containers
Thread Safety in the C++ Standard Library
Standard Template Library