36template <
class Key, std::
size_t N,
class Compare = std::less<Key>>
class set :
private Compare {
59 constexpr set(
const set &other) =
default;
61 constexpr set(container_type keys, Compare
const & comp)
66 explicit constexpr set(container_type keys)
67 :
set{keys, Compare{}} {}
69 constexpr set(std::initializer_list<Key> keys, Compare
const & comp)
70 :
set{container_type{keys}, comp} {
73 constexpr set(std::initializer_list<Key> keys)
74 :
set{keys, Compare{}} {}
79 constexpr bool empty()
const {
return !N; }
84 template <
class KeyType>
85 constexpr std::size_t
count(KeyType
const &key)
const {
89 template <
class KeyType>
98 template <
class KeyType>
99 constexpr bool contains(KeyType
const &key)
const {
100 return this->
find(key) != keys_.end();
103 template <
class KeyType>
104 constexpr std::pair<const_iterator, const_iterator>
equal_range(KeyType
const &key)
const {
107 return {lower, lower};
109 return {lower, lower + 1};
112 template <
class KeyType>
121 template <
class KeyType>
149 constexpr bool operator<=(
set const& rhs)
const {
return (*
this < rhs) || (*
this == rhs); }
151 constexpr bool operator>=(
set const& rhs)
const {
return (*
this > rhs) || (*
this == rhs); }
154template <
class Key,
class Compare>
class set<Key, 0, Compare> :
private Compare {
176 constexpr set(
const set &other) =
default;
180 constexpr set(std::initializer_list<Key>, Compare
const &comp)
182 constexpr set(std::initializer_list<Key> keys) :
set{keys, Compare{}} {}
187 constexpr bool empty()
const {
return true; }
192 template <
class KeyType>
193 constexpr std::size_t
count(KeyType
const &)
const {
return 0; }
195 template <
class KeyType>
198 template <
class KeyType>
199 constexpr std::pair<const_iterator, const_iterator>
202 template <
class KeyType>
205 template <
class KeyType>
229template <
typename T, std::
size_t N>
234template <
typename T, std::
size_t N>
235constexpr auto make_set(std::array<T, N>
const &args) {
239template <
typename T,
typename Compare, std::
size_t N>
240constexpr auto make_set(
const T (&args)[N], Compare
const& compare = Compare{}) {
241 return set<T, N, Compare>(args, compare);
244template <
typename T,
typename Compare, std::
size_t N>
245constexpr auto make_set(std::array<T, N>
const &args, Compare
const& compare = Compare{}) {
246 return set<T, N, Compare>(args, compare);
249#ifdef FROZEN_LETITGO_HAS_DEDUCTION_GUIDES
251template<
class T,
class... Args>
252set(T, Args...) ->
set<
T,
sizeof...(Args) + 1>;
Definition basic_types.h:90
const value_type & const_reference
Definition basic_types.h:109
const_pointer const_iterator
Definition basic_types.h:113
const value_type * const_pointer
Definition basic_types.h:111
std::size_t size_type
Definition basic_types.h:114
typename container_type::const_pointer pointer
Definition set.h:167
constexpr const_iterator end() const
Definition set.h:215
constexpr std::pair< const_iterator, const_iterator > equal_range(KeyType const &) const
Definition set.h:200
constexpr set(bits::carray< Key, 0 >)
Definition set.h:178
Key key_type
Definition set.h:159
constexpr set(std::initializer_list< Key >, Compare const &comp)
Definition set.h:180
constexpr set(const set &other)=default
constexpr const_reverse_iterator crbegin() const
Definition set.h:219
constexpr const_reverse_iterator crend() const
Definition set.h:221
pointer const_pointer
Definition set.h:168
constexpr const_iterator cend() const
Definition set.h:216
constexpr const_iterator find(KeyType const &) const
Definition set.h:196
typename container_type::size_type difference_type
Definition set.h:162
constexpr const_iterator upper_bound(KeyType const &) const
Definition set.h:206
constexpr const key_compare & value_comp() const
Definition set.h:210
constexpr const_iterator cbegin() const
Definition set.h:214
constexpr set & operator=(const set &other)=default
constexpr const_reverse_iterator rend() const
Definition set.h:220
typename container_type::const_reference reference
Definition set.h:165
constexpr set(std::initializer_list< Key > keys)
Definition set.h:182
constexpr const key_compare & key_comp() const
Definition set.h:209
const_pointer const_iterator
Definition set.h:171
Key value_type
Definition set.h:160
typename container_type::size_type size_type
Definition set.h:161
constexpr const_reverse_iterator rbegin() const
Definition set.h:218
reference const_reference
Definition set.h:166
constexpr size_type max_size() const
Definition set.h:189
constexpr std::size_t count(KeyType const &) const
Definition set.h:193
Compare key_compare
Definition set.h:163
pointer reverse_iterator
Definition set.h:170
pointer iterator
Definition set.h:169
constexpr size_type size() const
Definition set.h:188
Compare value_compare
Definition set.h:164
constexpr bool empty() const
Definition set.h:187
const_pointer const_reverse_iterator
Definition set.h:172
constexpr const_iterator begin() const
Definition set.h:213
constexpr set(bits::carray< Key, 0 >, Compare const &)
Definition set.h:177
constexpr const_iterator lower_bound(KeyType const &) const
Definition set.h:203
constexpr set(std::initializer_list< Key > keys, Compare const &comp)
Definition set.h:69
constexpr size_type max_size() const
Definition set.h:81
typename container_type::const_pointer pointer
Definition set.h:50
constexpr set(std::initializer_list< Key > keys)
Definition set.h:73
constexpr set & operator=(const set &other)=default
constexpr size_type size() const
Definition set.h:80
Compare value_compare
Definition set.h:47
constexpr bool contains(KeyType const &key) const
Definition set.h:99
Compare key_compare
Definition set.h:46
constexpr std::pair< const_iterator, const_iterator > equal_range(KeyType const &key) const
Definition set.h:104
constexpr std::size_t count(KeyType const &key) const
Definition set.h:85
reference const_reference
Definition set.h:49
typename container_type::const_reference reference
Definition set.h:48
constexpr set(container_type keys)
Definition set.h:66
Key key_type
Definition set.h:42
Key value_type
Definition set.h:43
typename container_type::const_iterator iterator
Definition set.h:52
constexpr bool operator<(set const &rhs) const
Definition set.h:148
constexpr const_iterator begin() const
Definition set.h:135
constexpr const_reverse_iterator crbegin() const
Definition set.h:141
constexpr const_iterator lower_bound(KeyType const &key) const
Definition set.h:113
constexpr bool operator!=(set const &rhs) const
Definition set.h:147
std::reverse_iterator< iterator > reverse_iterator
Definition set.h:53
constexpr set(container_type keys, Compare const &comp)
Definition set.h:61
constexpr const_reverse_iterator rbegin() const
Definition set.h:140
pointer const_pointer
Definition set.h:51
constexpr bool operator==(set const &rhs) const
Definition set.h:146
constexpr bool operator>(set const &rhs) const
Definition set.h:150
constexpr bool operator>=(set const &rhs) const
Definition set.h:151
iterator const_iterator
Definition set.h:54
constexpr const_iterator end() const
Definition set.h:137
constexpr const_iterator cbegin() const
Definition set.h:136
constexpr bool empty() const
Definition set.h:79
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition set.h:55
constexpr set(const set &other)=default
constexpr const key_compare & value_comp() const
Definition set.h:132
typename container_type::size_type size_type
Definition set.h:44
typename container_type::size_type difference_type
Definition set.h:45
constexpr const_iterator find(KeyType const &key) const
Definition set.h:90
constexpr bool operator<=(set const &rhs) const
Definition set.h:149
constexpr const_iterator cend() const
Definition set.h:138
constexpr const_reverse_iterator rend() const
Definition set.h:142
constexpr const_reverse_iterator crend() const
Definition set.h:143
constexpr const_iterator upper_bound(KeyType const &key) const
Definition set.h:122
constexpr const key_compare & key_comp() const
Definition set.h:131
@ T
Definition AcceleratorCodes.hpp:97
Definition algorithms.h:33
constexpr bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2)
Definition algorithms.h:210
constexpr ForwardIt lower_bound(ForwardIt first, const T &value, Compare const &compare)
Definition algorithms.h:197
constexpr bool lexicographical_compare(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2)
Definition algorithms.h:221
constexpr bool binary_search(ForwardIt first, const T &value, Compare const &compare)
Definition algorithms.h:202
Definition algorithm.h:30
constexpr auto make_set(bits::ignored_arg={})
Definition set.h:225
Definition basic_types.h:39