std::set
Defined in header <set>
template<
class Key,
class Compare = std::less<Key>, (1)
class Allocator = std::allocator<Key>
> class set;
namespace pmr {
template<
class Key, (2) (since C++17)
class Compare = std::less<Key>
> using set = std::set<Key, Compare, std::pmr::polymorphic_allocator<Key>>;
}
std::set is an associative container that contains a sorted set of unique objects of type Key. Sorting is done
using the key comparison function Compare. Search, removal, and insertion operations have logarithmic
complexity. Sets are usually implemented as red-black trees .
Everywhere the standard library uses the Compare requirements, uniqueness is determined by using the
equivalence relation. In imprecise terms, two objects a and b are considered equivalent if neither compares
less than the other: !comp(a, b) && !comp(b, a) .
std::set meets the requirements of Container, AllocatorAwareContainer, AssociativeContainer and
ReversibleContainer.
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)
key_compare Compare
value_compare Compare
allocator_type Allocator
reference value_type&
const_reference const value_type&
Allocator::pointer (until C++11)
pointer
std::allocator_traits<Allocator>::pointer (since C++11)
Allocator::const_pointer (until C++11)
const_pointer
std::allocator_traits<Allocator>::const_pointer (since C++11)
iterator Constant LegacyBidirectionalIterator to value_type
const_iterator LegacyBidirectionalIterator to const value_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>
node_type (since C++17) a specialization of node handle representing 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 iterator and node_type.
Member functions
constructs the set
(constructor)
(public member function)
destructs the set
(destructor) (public member function)
assigns values to the container
operator=
(public member function)
returns the associated allocator
get_allocator
(public member function)
Iterators
begin returns an iterator to the beginning
cbegin (C++11) (public member function)
end returns an iterator to the end
cend (C++11) (public member function)
rbegin returns a reverse iterator to the beginning
crbegin (C++11) (public member function)
rend returns a reverse iterator to the end
crend (C++11) (public member function)
Capacity
checks whether the container is empty
empty
(public member function)
returns the number of elements
size
(public member function)
returns the maximum possible number of elements
max_size
(public member function)
Modifiers
clears the contents
clear
(public member function)
inserts elements or nodes (since C++17)
insert
(public member function)
inserts a range of elements
insert_range (C++23)
(public member function)
constructs element in-place
emplace (C++11)
(public member function)
constructs elements in-place using a hint
emplace_hint (C++11)
(public member function)
erases elements
erase (public member function)
swaps the contents
swap
(public member function)
extracts nodes from the container
extract (C++17)
(public member function)
splices nodes from another container
merge (C++17)
(public member function)
Lookup
returns the number of elements matching specific key
count
(public member function)
finds element with specific key
find
(public member function)
checks if the container contains element with specific key
contains (C++20)
(public member function)
returns range of elements matching a specific key
equal_range
(public member function)
returns an iterator to the first element not less than the given key
lower_bound
(public member function)
returns an iterator to the first element greater than the given key
upper_bound (public member function)
Observers
returns the function that compares keys
key_comp
(public member function)
returns the function that compares keys in objects of type value_type
value_comp
(public member function)
Non-member functions
operator==
operator!= (removed in C++20)
operator< (removed in C++20)
lexicographically compares the values in the set
operator<= (removed in C++20)
(function template)
operator> (removed in C++20)
operator>= (removed in C++20)
operator<=> (C++20)
specializes the std::swap algorithm
std::swap(std::set)
(function template)
Erases all elements satisfying specific criteria
erase_if(std::set) (C++20)
(function template)
(since C++17)
Deduction guides
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.
Example
This section is incomplete
Reason: no example
Defect Reports
The following behavior-changing defect reports were applied retroactively to previously published C++
standards.
DR Applied to Behavior as published Correct behavior
LWG 103 (https://cplusplus.github.io/LWG/issue103) C++98 iterator allows modification of keys iterator made constant
Key was not required to be CopyConstructible Key is also required to
LWG 230 (https://cplusplus.github.io/LWG/issue230) C++98
(a key of type Key might not be able to be constructed) be CopyConstructible
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/set&oldid=149235"