Go to the documentation of this file.
24 #ifndef TSL_ROBIN_SET_H
25 #define TSL_ROBIN_SET_H
30 #include <initializer_list>
32 #include <type_traits>
79 template <
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
80 class Allocator = std::allocator<Key>,
bool StoreHash = false,
81 class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>>
98 StoreHash, GrowthPolicy>;
121 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
122 :
m_ht(my_bucket_count, hash, equal, alloc)
127 :
robin_set(my_bucket_count, Hash(), KeyEqual(), alloc)
132 :
robin_set(my_bucket_count, hash, KeyEqual(), alloc)
138 template <
class InputIt>
141 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
142 :
robin_set(my_bucket_count, hash, equal, alloc)
147 template <
class InputIt>
149 :
robin_set(first, last, my_bucket_count, Hash(), KeyEqual(), alloc)
153 template <
class InputIt>
155 const Allocator &alloc)
156 :
robin_set(first, last, my_bucket_count, hash, KeyEqual(), alloc)
162 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
168 const Allocator &alloc)
174 const Allocator &alloc)
228 template <
class InputIt>
void insert(InputIt first, InputIt last) {
m_ht.
insert(first, last); }
230 void insert(std::initializer_list<value_type> ilist)
241 template <
class... Args> std::pair<iterator, bool>
emplace(Args &&... args)
269 return m_ht.
erase(key, precalculated_hash);
276 template <
class K,
class KE = KeyEqual,
277 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
290 template <
class K,
class KE = KeyEqual,
291 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
294 return m_ht.
erase(key, precalculated_hash);
311 return m_ht.
count(key, precalculated_hash);
318 template <
class K,
class KE = KeyEqual,
319 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
332 template <
class K,
class KE = KeyEqual,
333 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
336 return m_ht.
count(key, precalculated_hash);
348 return m_ht.
find(key, precalculated_hash);
358 return m_ht.
find(key, precalculated_hash);
365 template <
class K,
class KE = KeyEqual,
366 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
379 template <
class K,
class KE = KeyEqual,
380 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
383 return m_ht.
find(key, precalculated_hash);
389 template <
class K,
class KE = KeyEqual,
390 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
403 template <
class K,
class KE = KeyEqual,
404 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
407 return m_ht.
find(key, precalculated_hash);
417 std::pair<iterator, iterator>
equal_range(
const Key &key, std::size_t precalculated_hash)
422 std::pair<const_iterator, const_iterator>
equal_range(
const Key &key)
const
430 std::pair<const_iterator, const_iterator>
equal_range(
const Key & key,
431 std::size_t precalculated_hash)
const
440 template <
class K,
class KE = KeyEqual,
441 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
454 template <
class K,
class KE = KeyEqual,
455 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
456 std::pair<iterator, iterator>
equal_range(
const K &key, std::size_t precalculated_hash)
464 template <
class K,
class KE = KeyEqual,
465 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
466 std::pair<const_iterator, const_iterator>
equal_range(
const K &key)
const
474 template <
class K,
class KE = KeyEqual,
475 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
476 std::pair<const_iterator, const_iterator>
equal_range(
const K & key,
477 std::size_t precalculated_hash)
const
531 for (
const auto &element_lhs : lhs) {
532 const auto it_element_rhs = rhs.
find(element_lhs);
533 if (it_element_rhs == rhs.
cend()) {
556 template <
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
557 class Allocator = std::allocator<Key>,
bool StoreHash = false>
iterator begin() noexcept
Definition: robin_set.h:194
ht m_ht
Definition: robin_set.h:549
typename ht::const_iterator const_iterator
Definition: robin_set.h:113
iterator find(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:381
Definition: bhopscotch_map.h:37
robin_set(std::initializer_list< value_type > init, size_type my_bucket_count=ht::DEFAULT_INIT_BUCKETS_SIZE, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:160
float max_load_factor() const
Definition: robin_set.h:494
hasher hash_function() const
Definition: robin_hash.h:1034
typename ht::reference reference
Definition: robin_set.h:108
size_type size() const noexcept
Definition: robin_hash.h:669
const_iterator find(const Key &key) const
Definition: robin_set.h:351
typename ht::const_pointer const_pointer
Definition: robin_set.h:111
void reserve(size_type new_count)
Definition: robin_set.h:508
size_type erase(const key_type &key, std::size_t precalculated_hash)
Definition: robin_set.h:267
float max_load_factor() const
Definition: robin_hash.h:1005
iterator end() noexcept
Definition: robin_set.h:198
void rehash(size_type new_count)
Definition: robin_set.h:507
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_hash.h:740
std::pair< iterator, iterator > equal_range(const Key &key, std::size_t precalculated_hash)
Definition: robin_set.h:417
value_type * pointer
Definition: robin_hash.h:348
iterator insert(const_iterator hint, const value_type &value)
Definition: robin_set.h:218
const_iterator find(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:405
iterator insert(const_iterator hint, value_type &&value)
Definition: robin_set.h:223
typename ht::const_reference const_reference
Definition: robin_set.h:109
std::pair< iterator, bool > insert(const value_type &value)
Definition: robin_set.h:214
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_set.h:241
Definition: robin_set.h:82
typename ht::pointer pointer
Definition: robin_set.h:110
std::ptrdiff_t difference_type
Definition: robin_hash.h:342
struct anonymous_namespace{Ioss_SmartAssert.C}::assert_initializer init
bool empty() const noexcept
Definition: robin_hash.h:667
std::size_t size_type
Definition: robin_hash.h:341
size_type erase(const key_type &key)
Definition: robin_set.h:260
iterator erase(const_iterator first, const_iterator last)
Definition: robin_set.h:259
size_type size() const noexcept
Definition: robin_set.h:206
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_set.h:252
const_iterator cend() const noexcept
Definition: robin_set.h:200
const key_type & operator()(const Key &key) const noexcept
Definition: robin_set.h:92
robin_set(std::initializer_list< value_type > init, size_type my_bucket_count, const Allocator &alloc)
Definition: robin_set.h:167
typename ht::difference_type difference_type
Definition: robin_set.h:104
hasher hash_function() const
Definition: robin_set.h:513
typename ht::iterator iterator
Definition: robin_set.h:112
std::pair< const_iterator, const_iterator > equal_range(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:430
float min_load_factor() const
Definition: robin_set.h:493
size_type erase(const K &key)
Definition: robin_set.h:278
robin_set(InputIt first, InputIt last, size_type my_bucket_count, const Allocator &alloc)
Definition: robin_set.h:148
iterator erase(const_iterator pos)
Definition: robin_set.h:258
iterator find(const K &key)
Definition: robin_set.h:367
size_type max_size() const noexcept
Definition: robin_hash.h:671
size_type bucket_count() const
Definition: robin_set.h:485
robin_set(size_type my_bucket_count, const Allocator &alloc)
Definition: robin_set.h:126
robin_set(InputIt first, InputIt last, size_type my_bucket_count=ht::DEFAULT_INIT_BUCKETS_SIZE, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:139
void rehash(size_type new_count)
Definition: robin_hash.h:1020
iterator insert_hint(const_iterator hint, P &&value)
Definition: robin_hash.h:691
void max_load_factor(float ml)
Definition: robin_set.h:505
bool empty() const noexcept
Definition: robin_set.h:205
std::pair< iterator, iterator > equal_range(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:456
const value_type & const_reference
Definition: robin_hash.h:347
key_type & operator()(Key &key) noexcept
Definition: robin_set.h:94
void clear() noexcept
Definition: robin_hash.h:676
key_equal key_eq() const
Definition: robin_set.h:514
friend void swap(robin_set &lhs, robin_set &rhs)
Definition: robin_set.h:546
void reserve(size_type new_count)
Definition: robin_hash.h:1026
Key value_type
Definition: robin_hash.h:340
iterator find(const K &key)
Definition: robin_hash.h:940
robin_set()
Definition: robin_set.h:118
const_iterator cbegin() const noexcept
Definition: robin_hash.h:648
const_iterator find(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:356
std::pair< const_iterator, const_iterator > equal_range(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:476
typename ht::size_type size_type
Definition: robin_set.h:103
size_type count(const K &key) const
Definition: robin_hash.h:928
const_iterator find(const K &key) const
Definition: robin_set.h:391
Definition: robin_hash.h:52
static const size_type DEFAULT_INIT_BUCKETS_SIZE
Definition: robin_hash.h:1304
robin_set(const Allocator &alloc)
Definition: robin_set.h:136
const_iterator cend() const noexcept
Definition: robin_hash.h:662
KeyEqual key_equal
Definition: robin_hash.h:344
const value_type * const_pointer
Definition: robin_hash.h:349
typename ht::key_equal key_equal
Definition: robin_set.h:106
size_type count(const Key &key) const
Definition: robin_set.h:302
Hash hasher
Definition: robin_hash.h:343
robin_set(std::initializer_list< value_type > init, size_type my_bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:173
iterator erase(iterator pos)
Definition: robin_hash.h:772
Definition: robin_hash.h:325
iterator mutable_iterator(const_iterator pos)
Definition: robin_hash.h:1041
allocator_type get_allocator() const
Definition: robin_set.h:189
size_type count(const K &key) const
Definition: robin_set.h:320
iterator erase(iterator pos)
Definition: robin_set.h:257
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_hash.h:745
void min_load_factor(float ml)
Definition: robin_set.h:504
typename ht::key_type key_type
Definition: robin_set.h:101
std::pair< const_iterator, const_iterator > equal_range(const Key &key) const
Definition: robin_set.h:422
typename ht::value_type value_type
Definition: robin_set.h:102
std::pair< const_iterator, const_iterator > equal_range(const K &key) const
Definition: robin_set.h:466
robin_iterator< true > const_iterator
Definition: robin_hash.h:351
Key key_type
Definition: robin_set.h:90
void swap(robin_hash &other)
Definition: robin_hash.h:865
float min_load_factor() const
Definition: robin_hash.h:1003
typename ht::allocator_type allocator_type
Definition: robin_set.h:107
const_iterator cbegin() const noexcept
Definition: robin_set.h:196
std::pair< iterator, iterator > equal_range(const Key &key)
Definition: robin_set.h:410
Allocator allocator_type
Definition: robin_hash.h:345
typename ht::hasher hasher
Definition: robin_set.h:105
size_type max_bucket_count() const
Definition: robin_set.h:486
robin_set & operator=(std::initializer_list< value_type > ilist)
Definition: robin_set.h:179
iterator end() noexcept
Definition: robin_hash.h:658
robin_set(size_type my_bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:131
robin_set(InputIt first, InputIt last, size_type my_bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:154
iterator find(const Key &key)
Definition: robin_set.h:339
friend bool operator!=(const robin_set &lhs, const robin_set &rhs)
Definition: robin_set.h:541
allocator_type get_allocator() const
Definition: robin_hash.h:631
void insert(std::initializer_list< value_type > ilist)
Definition: robin_set.h:230
iterator find(const Key &key, std::size_t precalculated_hash)
Definition: robin_set.h:346
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_set.h:442
Definition: robin_set.h:87
size_type max_bucket_count() const
Definition: robin_hash.h:986
size_type count(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:309
friend bool operator==(const robin_set &lhs, const robin_set &rhs)
Definition: robin_set.h:525
void insert(InputIt first, InputIt last)
Definition: robin_set.h:228
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_hash.h:957
value_type & reference
Definition: robin_hash.h:346
detail_robin_hash::robin_hash< Key, KeySelect, void, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > ht
Definition: robin_set.h:98
size_type erase(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:292
size_type max_size() const noexcept
Definition: robin_set.h:207
float load_factor() const
Definition: robin_set.h:491
typename KeySelect::key_type key_type
Definition: robin_hash.h:339
const_iterator end() const noexcept
Definition: robin_set.h:199
void clear() noexcept
Definition: robin_set.h:212
size_type bucket_count() const
Definition: robin_hash.h:984
iterator begin() noexcept
Definition: robin_hash.h:636
robin_iterator< false > iterator
Definition: robin_hash.h:350
size_type count(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:334
void swap(robin_set &other)
Definition: robin_set.h:297
key_equal key_eq() const
Definition: robin_hash.h:1036
robin_set(size_type my_bucket_count, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:120
std::pair< iterator, bool > insert(value_type &&value)
Definition: robin_set.h:216
iterator mutable_iterator(const_iterator pos)
Definition: robin_set.h:523
std::pair< iterator, bool > insert(P &&value)
Definition: robin_hash.h:686
float load_factor() const
Definition: robin_hash.h:994
const_iterator begin() const noexcept
Definition: robin_set.h:195