24 #ifndef TSL_ROBIN_MAP_H 25 #define TSL_ROBIN_MAP_H 30 #include <initializer_list> 32 #include <type_traits> 75 template <
class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
76 class Allocator = std::allocator<std::pair<Key, T>>,
bool StoreHash = false,
77 class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>>
90 return key_value.first;
103 return key_value.second;
110 KeyEqual, Allocator, StoreHash, GrowthPolicy>;
135 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
152 template <
class InputIt>
154 const Hash &hash = Hash(),
const KeyEqual &equal = KeyEqual(),
155 const Allocator &alloc = Allocator())
161 template <
class InputIt>
167 template <
class InputIt>
169 const Allocator &alloc)
176 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
182 const Allocator &alloc)
188 const Allocator &alloc)
230 template <class P, typename std::enable_if<std::is_constructible<value_type, P &&>::value>::type
232 std::pair<iterator, bool>
insert(P &&value)
244 template <class P, typename std::enable_if<std::is_constructible<value_type, P &&>::value>::type
256 template <
class InputIt>
void insert(InputIt first, InputIt last) {
m_ht.
insert(first, last); }
258 void insert(std::initializer_list<value_type> ilist)
289 template <
class... Args> std::pair<iterator, bool>
emplace(Args &&... args)
305 template <
class... Args>
316 template <
class... Args>
322 template <
class... Args>
340 return m_ht.
erase(key, precalculated_hash);
347 template <
class K,
class KE = KeyEqual,
348 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
361 template <
class K,
class KE = KeyEqual,
362 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
365 return m_ht.
erase(key, precalculated_hash);
380 T &
at(
const Key &key, std::size_t precalculated_hash)
382 return m_ht.
at(key, precalculated_hash);
385 const T &
at(
const Key &key)
const {
return m_ht.
at(key); }
390 const T &
at(
const Key &key, std::size_t precalculated_hash)
const 392 return m_ht.
at(key, precalculated_hash);
399 template <
class K,
class KE = KeyEqual,
400 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
413 template <
class K,
class KE = KeyEqual,
414 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
415 T &
at(
const K &key, std::size_t precalculated_hash)
417 return m_ht.
at(key, precalculated_hash);
423 template <
class K,
class KE = KeyEqual,
424 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
425 const T &
at(
const K &key)
const 433 template <
class K,
class KE = KeyEqual,
434 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
435 const T &
at(
const K &key, std::size_t precalculated_hash)
const 437 return m_ht.
at(key, precalculated_hash);
452 return m_ht.
count(key, precalculated_hash);
459 template <
class K,
class KE = KeyEqual,
460 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
473 template <
class K,
class KE = KeyEqual,
474 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
477 return m_ht.
count(key, precalculated_hash);
489 return m_ht.
find(key, precalculated_hash);
499 return m_ht.
find(key, precalculated_hash);
506 template <
class K,
class KE = KeyEqual,
507 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
520 template <
class K,
class KE = KeyEqual,
521 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
524 return m_ht.
find(key, precalculated_hash);
530 template <
class K,
class KE = KeyEqual,
531 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
544 template <
class K,
class KE = KeyEqual,
545 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
548 return m_ht.
find(key, precalculated_hash);
558 std::pair<iterator, iterator>
equal_range(
const Key &key, std::size_t precalculated_hash)
563 std::pair<const_iterator, const_iterator>
equal_range(
const Key &key)
const 571 std::pair<const_iterator, const_iterator>
equal_range(
const Key & key,
572 std::size_t precalculated_hash)
const 581 template <
class K,
class KE = KeyEqual,
582 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
595 template <
class K,
class KE = KeyEqual,
596 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
597 std::pair<iterator, iterator>
equal_range(
const K &key, std::size_t precalculated_hash)
605 template <
class K,
class KE = KeyEqual,
606 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
607 std::pair<const_iterator, const_iterator>
equal_range(
const K &key)
const 615 template <
class K,
class KE = KeyEqual,
616 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
617 std::pair<const_iterator, const_iterator>
equal_range(
const K & key,
618 std::size_t precalculated_hash)
const 672 for (
const auto &element_lhs : lhs) {
673 const auto it_element_rhs = rhs.
find(element_lhs.first);
674 if (it_element_rhs == rhs.
cend() || element_lhs.second != it_element_rhs->second) {
697 template <
class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
698 class Allocator = std::allocator<std::pair<Key, T>>,
bool StoreHash = false>
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_hash.h:936
robin_map(size_type bucket_count, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_map.h:134
value_type & reference
Definition: robin_hash.h:329
size_type max_bucket_count() const
Definition: robin_map.h:627
iterator end() noexcept
Definition: robin_hash.h:637
typename ht::key_equal key_equal
Definition: robin_map.h:119
std::size_t size_type
Definition: robin_hash.h:324
iterator end() noexcept
Definition: robin_map.h:212
float min_load_factor() const
Definition: robin_map.h:634
T value_type
Definition: robin_map.h:99
hasher hash_function() const
Definition: robin_map.h:654
size_type bucket_count() const
Definition: robin_hash.h:962
typename ht::const_reference const_reference
Definition: robin_map.h:122
iterator find(const K &key, std::size_t precalculated_hash)
Definition: robin_map.h:522
size_type max_bucket_count() const
Definition: robin_hash.h:964
Definition: robin_map.h:83
const T & at(const K &key, std::size_t precalculated_hash) const
Definition: robin_map.h:435
std::pair< iterator, bool > try_emplace(K &&key, Args &&... args)
Definition: robin_hash.h:730
std::pair< iterator, bool > insert(P &&value)
Definition: robin_map.h:232
T & operator[](const Key &key)
Definition: robin_map.h:440
iterator find(const Key &key, std::size_t precalculated_hash)
Definition: robin_map.h:487
const value_type & const_reference
Definition: robin_hash.h:330
T & at(const K &key)
Definition: robin_map.h:401
std::pair< iterator, bool > insert(P &&value)
Definition: robin_hash.h:665
const T & at(const K &key) const
Definition: robin_map.h:425
float load_factor() const
Definition: robin_hash.h:972
typename KeySelect::key_type key_type
Definition: robin_hash.h:322
size_type erase(const K &key, std::size_t precalculated_hash)
Definition: robin_map.h:363
friend bool operator!=(const robin_map &lhs, const robin_map &rhs)
Definition: robin_map.h:682
Definition: hopscotch_growth_policy.h:37
iterator erase(const_iterator first, const_iterator last)
Definition: robin_map.h:330
const_iterator find(const Key &key) const
Definition: robin_map.h:492
std::pair< iterator, bool > insert(const value_type &value)
Definition: robin_map.h:228
void insert(InputIt first, InputIt last)
Definition: robin_map.h:256
std::pair< Key, T > value_type
Definition: robin_hash.h:323
const_iterator find(const K &key, std::size_t precalculated_hash) const
Definition: robin_map.h:546
iterator insert_hint(const_iterator hint, P &&value)
Definition: robin_hash.h:670
typename ht::key_type key_type
Definition: robin_map.h:113
iterator begin() noexcept
Definition: robin_map.h:208
iterator begin() noexcept
Definition: robin_hash.h:615
const_iterator begin() const noexcept
Definition: robin_map.h:209
std::pair< iterator, iterator > equal_range(const Key &key, std::size_t precalculated_hash)
Definition: robin_map.h:558
void max_load_factor(float ml)
Definition: robin_map.h:646
size_type count(const K &key) const
Definition: robin_hash.h:907
void swap(robin_map &other)
Definition: robin_map.h:368
void clear() noexcept
Definition: robin_hash.h:655
const_iterator end() const noexcept
Definition: robin_map.h:213
typename ht::hasher hasher
Definition: robin_map.h:118
iterator insert(const_iterator hint, value_type &&value)
Definition: robin_map.h:251
const value_type * const_pointer
Definition: robin_hash.h:332
T mapped_type
Definition: robin_map.h:114
size_type count(const K &key) const
Definition: robin_map.h:461
bool empty() const noexcept
Definition: robin_map.h:219
size_type bucket_count() const
Definition: robin_map.h:626
iterator erase(iterator pos)
Definition: robin_hash.h:751
const_iterator cbegin() const noexcept
Definition: robin_hash.h:627
size_type size() const noexcept
Definition: robin_hash.h:648
std::pair< iterator, iterator > equal_range(const Key &key)
Definition: robin_map.h:551
Definition: robin_map.h:96
typename ht::allocator_type allocator_type
Definition: robin_map.h:120
T & operator[](Key &&key)
Definition: robin_map.h:441
Definition: robin_map.h:78
size_type max_size() const noexcept
Definition: robin_map.h:221
const T & at(const Key &key, std::size_t precalculated_hash) const
Definition: robin_map.h:390
iterator try_emplace(const_iterator hint, const key_type &k, Args &&... args)
Definition: robin_map.h:317
const_iterator cend() const noexcept
Definition: robin_hash.h:641
KeyEqual key_equal
Definition: robin_hash.h:327
std::pair< iterator, bool > insert_or_assign(const key_type &k, M &&obj)
Definition: robin_map.h:263
Key key_type
Definition: robin_map.h:86
std::pair< iterator, bool > insert_or_assign(K &&key, M &&obj)
Definition: robin_hash.h:697
key_type & operator()(std::pair< Key, T > &key_value) noexcept
Definition: robin_map.h:93
typename ht::value_type value_type
Definition: robin_map.h:115
size_type count(const K &key, std::size_t precalculated_hash) const
Definition: robin_map.h:475
robin_map & operator=(std::initializer_list< value_type > ilist)
Definition: robin_map.h:193
std::pair< iterator, bool > try_emplace(const key_type &k, Args &&... args)
Definition: robin_map.h:306
iterator mutable_iterator(const_iterator pos)
Definition: robin_hash.h:1019
iterator insert_or_assign(const_iterator hint, const key_type &k, M &&obj)
Definition: robin_map.h:273
key_equal key_eq() const
Definition: robin_map.h:655
void min_load_factor(float ml)
Definition: robin_map.h:645
typename ht::const_pointer const_pointer
Definition: robin_map.h:124
void rehash(size_type count)
Definition: robin_map.h:648
robin_map(size_type bucket_count, const Allocator &alloc)
Definition: robin_map.h:140
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_hash.h:724
robin_map()
Definition: robin_map.h:132
std::pair< iterator, bool > try_emplace(key_type &&k, Args &&... args)
Definition: robin_map.h:311
T & at(const Key &key, std::size_t precalculated_hash)
Definition: robin_map.h:380
size_type erase(const K &key)
Definition: robin_map.h:349
iterator insert(const_iterator hint, P &&value)
Definition: robin_map.h:246
size_type max_size() const noexcept
Definition: robin_hash.h:650
std::pair< iterator, iterator > equal_range(const K &key, std::size_t precalculated_hash)
Definition: robin_map.h:597
robin_iterator< true > const_iterator
Definition: robin_hash.h:334
float load_factor() const
Definition: robin_map.h:632
void swap(robin_hash &other)
Definition: robin_hash.h:844
iterator erase(const_iterator pos)
Definition: robin_map.h:329
std::pair< const_iterator, const_iterator > equal_range(const K &key) const
Definition: robin_map.h:607
const_iterator find(const K &key) const
Definition: robin_map.h:532
robin_map(std::initializer_list< value_type > init, size_type bucket_count, const Allocator &alloc)
Definition: robin_map.h:181
const T & at(const Key &key) const
Definition: robin_map.h:385
const_iterator find(const Key &key, std::size_t precalculated_hash) const
Definition: robin_map.h:497
Allocator allocator_type
Definition: robin_hash.h:328
robin_map(InputIt first, InputIt last, size_type bucket_count=ht::DEFAULT_INIT_BUCKETS_SIZE, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_map.h:153
std::pair< const_iterator, const_iterator > equal_range(const Key &key, std::size_t precalculated_hash) const
Definition: robin_map.h:571
typename ht::pointer pointer
Definition: robin_map.h:123
U::value_type & at(const K &key)
Definition: robin_hash.h:867
ht m_ht
Definition: robin_map.h:690
T & at(const Key &key)
Definition: robin_map.h:373
allocator_type get_allocator() const
Definition: robin_map.h:203
iterator find(const K &key)
Definition: robin_hash.h:919
iterator find(const Key &key)
Definition: robin_map.h:480
robin_map(std::initializer_list< value_type > init, size_type bucket_count=ht::DEFAULT_INIT_BUCKETS_SIZE, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_map.h:174
Definition: robin_hash.h:52
robin_map(InputIt first, InputIt last, size_type bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_map.h:168
std::pair< iterator, bool > insert_or_assign(key_type &&k, M &&obj)
Definition: robin_map.h:268
iterator find(const K &key)
Definition: robin_map.h:508
void reserve(size_type count)
Definition: robin_map.h:649
const_iterator cbegin() const noexcept
Definition: robin_map.h:210
typename ht::reference reference
Definition: robin_map.h:121
key_equal key_eq() const
Definition: robin_hash.h:1014
typename ht::iterator iterator
Definition: robin_map.h:125
friend bool operator==(const robin_map &lhs, const robin_map &rhs)
Definition: robin_map.h:666
size_type count(const Key &key) const
Definition: robin_map.h:443
T & at(const K &key, std::size_t precalculated_hash)
Definition: robin_map.h:415
typename ht::difference_type difference_type
Definition: robin_map.h:117
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_map.h:300
value_type & operator()(std::pair< Key, T > &key_value) noexcept
Definition: robin_map.h:106
size_type count(const Key &key, std::size_t precalculated_hash) const
Definition: robin_map.h:450
static const size_type DEFAULT_INIT_BUCKETS_SIZE
Definition: robin_hash.h:1282
robin_map(std::initializer_list< value_type > init, size_type bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_map.h:187
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_map.h:583
const value_type & operator()(const std::pair< Key, T > &key_value) const noexcept
Definition: robin_map.h:101
void insert(std::initializer_list< value_type > ilist)
Definition: robin_map.h:258
struct anonymous_namespace{Ioss_SmartAssert.C}::assert_initializer init
Hash hasher
Definition: robin_hash.h:326
robin_map(const Allocator &alloc)
Definition: robin_map.h:150
void clear() noexcept
Definition: robin_map.h:226
detail_robin_hash::robin_hash< std::pair< Key, T >, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > ht
Definition: robin_map.h:110
hasher hash_function() const
Definition: robin_hash.h:1012
robin_iterator< false > iterator
Definition: robin_hash.h:333
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_hash.h:719
Definition: robin_hash.h:308
robin_map(InputIt first, InputIt last, size_type bucket_count, const Allocator &alloc)
Definition: robin_map.h:162
iterator insert(const_iterator hint, const value_type &value)
Definition: robin_map.h:239
typename ht::size_type size_type
Definition: robin_map.h:116
friend void swap(robin_map &lhs, robin_map &rhs)
Definition: robin_map.h:687
size_type size() const noexcept
Definition: robin_map.h:220
size_type erase(const key_type &key)
Definition: robin_map.h:331
std::pair< const_iterator, const_iterator > equal_range(const K &key, std::size_t precalculated_hash) const
Definition: robin_map.h:617
iterator try_emplace_hint(const_iterator hint, K &&key, Args &&... args)
Definition: robin_hash.h:738
std::pair< iterator, bool > insert(value_type &&value)
Definition: robin_map.h:237
iterator erase(iterator pos)
Definition: robin_map.h:328
iterator insert_or_assign(const_iterator hint, key_type &&k, M &&obj)
Definition: robin_map.h:278
robin_map(size_type bucket_count, const Hash &hash, const Allocator &alloc)
Definition: robin_map.h:145
std::ptrdiff_t difference_type
Definition: robin_hash.h:325
float max_load_factor() const
Definition: robin_hash.h:983
void reserve(size_type my_count)
Definition: robin_hash.h:1004
float min_load_factor() const
Definition: robin_hash.h:981
bool empty() const noexcept
Definition: robin_hash.h:646
float max_load_factor() const
Definition: robin_map.h:635
const_iterator cend() const noexcept
Definition: robin_map.h:214
const key_type & operator()(const std::pair< Key, T > &key_value) const noexcept
Definition: robin_map.h:88
value_type * pointer
Definition: robin_hash.h:331
iterator mutable_iterator(const_iterator pos)
Definition: robin_map.h:664
size_type erase(const key_type &key, std::size_t precalculated_hash)
Definition: robin_map.h:338
allocator_type get_allocator() const
Definition: robin_hash.h:610
iterator try_emplace(const_iterator hint, key_type &&k, Args &&... args)
Definition: robin_map.h:323
void rehash(size_type my_count)
Definition: robin_hash.h:998
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_map.h:289
std::pair< const_iterator, const_iterator > equal_range(const Key &key) const
Definition: robin_map.h:563
typename ht::const_iterator const_iterator
Definition: robin_map.h:126