24 #ifndef TSL_ROBIN_SET_H 25 #define TSL_ROBIN_SET_H 30 #include <initializer_list> 32 #include <type_traits> 75 template <
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
76 class Allocator = std::allocator<Key>,
bool StoreHash = false,
77 class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>>
94 StoreHash, GrowthPolicy>;
117 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
118 :
m_ht(my_bucket_count, hash, equal, alloc)
123 :
robin_set(my_bucket_count, Hash(), KeyEqual(), alloc)
128 :
robin_set(my_bucket_count, hash, KeyEqual(), alloc)
134 template <
class InputIt>
137 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
138 :
robin_set(my_bucket_count, hash, equal, alloc)
143 template <
class InputIt>
145 :
robin_set(first, last, my_bucket_count, Hash(), KeyEqual(), alloc)
149 template <
class InputIt>
151 const Allocator &alloc)
152 :
robin_set(first, last, my_bucket_count, hash, KeyEqual(), alloc)
158 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
164 const Allocator &alloc)
170 const Allocator &alloc)
224 template <
class InputIt>
void insert(InputIt first, InputIt last) {
m_ht.
insert(first, last); }
226 void insert(std::initializer_list<value_type> ilist)
237 template <
class... Args> std::pair<iterator, bool>
emplace(Args &&... args)
265 return m_ht.
erase(key, precalculated_hash);
272 template <
class K,
class KE = KeyEqual,
273 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
286 template <
class K,
class KE = KeyEqual,
287 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
290 return m_ht.
erase(key, precalculated_hash);
307 return m_ht.
count(key, precalculated_hash);
314 template <
class K,
class KE = KeyEqual,
315 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
328 template <
class K,
class KE = KeyEqual,
329 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
332 return m_ht.
count(key, precalculated_hash);
344 return m_ht.
find(key, precalculated_hash);
354 return m_ht.
find(key, precalculated_hash);
361 template <
class K,
class KE = KeyEqual,
362 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
375 template <
class K,
class KE = KeyEqual,
376 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
379 return m_ht.
find(key, precalculated_hash);
385 template <
class K,
class KE = KeyEqual,
386 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
399 template <
class K,
class KE = KeyEqual,
400 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
403 return m_ht.
find(key, precalculated_hash);
413 std::pair<iterator, iterator>
equal_range(
const Key &key, std::size_t precalculated_hash)
418 std::pair<const_iterator, const_iterator>
equal_range(
const Key &key)
const 426 std::pair<const_iterator, const_iterator>
equal_range(
const Key & key,
427 std::size_t precalculated_hash)
const 436 template <
class K,
class KE = KeyEqual,
437 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
450 template <
class K,
class KE = KeyEqual,
451 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
452 std::pair<iterator, iterator>
equal_range(
const K &key, std::size_t precalculated_hash)
460 template <
class K,
class KE = KeyEqual,
461 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
462 std::pair<const_iterator, const_iterator>
equal_range(
const K &key)
const 470 template <
class K,
class KE = KeyEqual,
471 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
472 std::pair<const_iterator, const_iterator>
equal_range(
const K & key,
473 std::size_t precalculated_hash)
const 527 for (
const auto &element_lhs : lhs) {
528 const auto it_element_rhs = rhs.
find(element_lhs);
529 if (it_element_rhs == rhs.
cend()) {
552 template <
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
553 class Allocator = std::allocator<Key>,
bool StoreHash = false>
typename ht::reference reference
Definition: robin_set.h:104
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_hash.h:936
Definition: robin_set.h:83
const_iterator find(const Key &key) const
Definition: robin_set.h:347
value_type & reference
Definition: robin_hash.h:329
size_type erase(const key_type &key, std::size_t precalculated_hash)
Definition: robin_set.h:263
iterator end() noexcept
Definition: robin_hash.h:637
size_type count(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:330
std::pair< iterator, bool > insert(value_type &&value)
Definition: robin_set.h:212
std::size_t size_type
Definition: robin_hash.h:324
iterator mutable_iterator(const_iterator pos)
Definition: robin_set.h:519
const_iterator begin() const noexcept
Definition: robin_set.h:191
const_iterator find(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:401
iterator find(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:377
iterator insert(const_iterator hint, value_type &&value)
Definition: robin_set.h:219
size_type bucket_count() const
Definition: robin_hash.h:962
void reserve(size_type my_count)
Definition: robin_set.h:504
size_type max_bucket_count() const
Definition: robin_hash.h:964
iterator end() noexcept
Definition: robin_set.h:194
typename ht::const_pointer const_pointer
Definition: robin_set.h:107
const value_type & const_reference
Definition: robin_hash.h:330
std::pair< iterator, bool > insert(P &&value)
Definition: robin_hash.h:665
std::pair< iterator, iterator > equal_range(const Key &key, std::size_t precalculated_hash)
Definition: robin_set.h:413
float load_factor() const
Definition: robin_hash.h:972
typename KeySelect::key_type key_type
Definition: robin_hash.h:322
size_type erase(const key_type &key)
Definition: robin_set.h:256
iterator insert(const_iterator hint, const value_type &value)
Definition: robin_set.h:214
Definition: hopscotch_growth_policy.h:37
typename ht::const_reference const_reference
Definition: robin_set.h:105
size_type size() const noexcept
Definition: robin_set.h:202
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_set.h:237
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_set.h:248
std::pair< iterator, bool > insert(const value_type &value)
Definition: robin_set.h:210
Key value_type
Definition: robin_hash.h:323
typename ht::pointer pointer
Definition: robin_set.h:106
iterator insert_hint(const_iterator hint, P &&value)
Definition: robin_hash.h:670
Key key_type
Definition: robin_set.h:86
iterator begin() noexcept
Definition: robin_hash.h:615
typename ht::difference_type difference_type
Definition: robin_set.h:100
size_type count(const K &key) const
Definition: robin_hash.h:907
typename ht::iterator iterator
Definition: robin_set.h:108
hasher hash_function() const
Definition: robin_set.h:509
void clear() noexcept
Definition: robin_hash.h:655
const value_type * const_pointer
Definition: robin_hash.h:332
robin_set(InputIt first, InputIt last, size_type my_bucket_count, const Allocator &alloc)
Definition: robin_set.h:144
robin_set(size_type my_bucket_count, const Allocator &alloc)
Definition: robin_set.h:122
size_type bucket_count() const
Definition: robin_set.h:481
iterator erase(const_iterator first, const_iterator last)
Definition: robin_set.h:255
iterator erase(iterator pos)
Definition: robin_hash.h:751
const_iterator cend() const noexcept
Definition: robin_set.h:196
const_iterator cbegin() const noexcept
Definition: robin_hash.h:627
size_type size() const noexcept
Definition: robin_hash.h:648
void max_load_factor(float ml)
Definition: robin_set.h:501
robin_set(std::initializer_list< value_type > init, size_type my_bucket_count, const Allocator &alloc)
Definition: robin_set.h:163
friend void swap(robin_set &lhs, robin_set &rhs)
Definition: robin_set.h:542
std::pair< const_iterator, const_iterator > equal_range(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:426
const_iterator cend() const noexcept
Definition: robin_hash.h:641
KeyEqual key_equal
Definition: robin_hash.h:327
float min_load_factor() const
Definition: robin_set.h:489
size_type erase(const K &key)
Definition: robin_set.h:274
iterator find(const K &key)
Definition: robin_set.h:363
iterator erase(const_iterator pos)
Definition: robin_set.h:254
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:135
iterator mutable_iterator(const_iterator pos)
Definition: robin_hash.h:1019
bool empty() const noexcept
Definition: robin_set.h:201
std::pair< const_iterator, const_iterator > equal_range(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:472
std::pair< iterator, iterator > equal_range(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:452
key_equal key_eq() const
Definition: robin_set.h:510
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_hash.h:724
size_type max_size() const noexcept
Definition: robin_hash.h:650
robin_set()
Definition: robin_set.h:114
robin_iterator< true > const_iterator
Definition: robin_hash.h:334
void swap(robin_hash &other)
Definition: robin_hash.h:844
const_iterator find(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:352
iterator erase(iterator pos)
Definition: robin_set.h:253
key_type & operator()(Key &key) noexcept
Definition: robin_set.h:90
typename ht::size_type size_type
Definition: robin_set.h:99
const_iterator find(const K &key) const
Definition: robin_set.h:387
Allocator allocator_type
Definition: robin_hash.h:328
robin_set(const Allocator &alloc)
Definition: robin_set.h:132
typename ht::key_equal key_equal
Definition: robin_set.h:102
size_type count(const Key &key) const
Definition: robin_set.h:298
typename ht::key_type key_type
Definition: robin_set.h:97
std::pair< const_iterator, const_iterator > equal_range(const Key &key) const
Definition: robin_set.h:418
robin_set(std::initializer_list< value_type > init, size_type my_bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:169
iterator find(const K &key)
Definition: robin_hash.h:919
size_type count(const K &key) const
Definition: robin_set.h:316
Definition: robin_hash.h:52
allocator_type get_allocator() const
Definition: robin_set.h:185
typename ht::allocator_type allocator_type
Definition: robin_set.h:103
const_iterator cbegin() const noexcept
Definition: robin_set.h:192
Definition: robin_set.h:78
void min_load_factor(float ml)
Definition: robin_set.h:500
typename ht::value_type value_type
Definition: robin_set.h:98
std::pair< const_iterator, const_iterator > equal_range(const K &key) const
Definition: robin_set.h:462
const key_type & operator()(const Key &key) const noexcept
Definition: robin_set.h:88
robin_set & operator=(std::initializer_list< value_type > ilist)
Definition: robin_set.h:175
key_equal key_eq() const
Definition: robin_hash.h:1014
std::pair< iterator, iterator > equal_range(const Key &key)
Definition: robin_set.h:406
static const size_type DEFAULT_INIT_BUCKETS_SIZE
Definition: robin_hash.h:1282
struct anonymous_namespace{Ioss_SmartAssert.C}::assert_initializer init
typename ht::hasher hasher
Definition: robin_set.h:101
Hash hasher
Definition: robin_hash.h:326
size_type count(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:305
friend bool operator==(const robin_set &lhs, const robin_set &rhs)
Definition: robin_set.h:521
hasher hash_function() const
Definition: robin_hash.h:1012
size_type max_bucket_count() const
Definition: robin_set.h:482
robin_iterator< false > iterator
Definition: robin_hash.h:333
size_type erase(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:288
robin_set(size_type my_bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:127
robin_set(InputIt first, InputIt last, size_type my_bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:150
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_hash.h:719
Definition: robin_hash.h:308
float load_factor() const
Definition: robin_set.h:487
iterator find(const Key &key)
Definition: robin_set.h:335
friend bool operator!=(const robin_set &lhs, const robin_set &rhs)
Definition: robin_set.h:537
void clear() noexcept
Definition: robin_set.h:208
const_iterator end() const noexcept
Definition: robin_set.h:195
void insert(std::initializer_list< value_type > ilist)
Definition: robin_set.h:226
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_set.h:438
iterator find(const Key &key, std::size_t precalculated_hash)
Definition: robin_set.h:342
void insert(InputIt first, InputIt last)
Definition: robin_set.h:224
std::ptrdiff_t difference_type
Definition: robin_hash.h:325
float max_load_factor() const
Definition: robin_hash.h:983
detail_robin_hash::robin_hash< Key, KeySelect, void, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > ht
Definition: robin_set.h:94
size_type max_size() const noexcept
Definition: robin_set.h:203
void reserve(size_type my_count)
Definition: robin_hash.h:1004
void rehash(size_type my_count)
Definition: robin_set.h:503
float min_load_factor() const
Definition: robin_hash.h:981
bool empty() const noexcept
Definition: robin_hash.h:646
void swap(robin_set &other)
Definition: robin_set.h:293
robin_set(size_type my_bucket_count, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:116
iterator begin() noexcept
Definition: robin_set.h:190
value_type * pointer
Definition: robin_hash.h:331
ht m_ht
Definition: robin_set.h:545
typename ht::const_iterator const_iterator
Definition: robin_set.h:109
allocator_type get_allocator() const
Definition: robin_hash.h:610
void rehash(size_type my_count)
Definition: robin_hash.h:998
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:156
float max_load_factor() const
Definition: robin_set.h:490