HDK
|
#include <robin_hash.h>
Classes | |
class | robin_iterator |
Public Types | |
using | key_type = typename KeySelect::key_type |
using | value_type = ValueType |
using | size_type = std::size_t |
using | difference_type = std::ptrdiff_t |
using | hasher = Hash |
using | key_equal = KeyEqual |
using | allocator_type = Allocator |
using | reference = value_type & |
using | const_reference = const value_type & |
using | pointer = value_type * |
using | const_pointer = const value_type * |
using | iterator = robin_iterator< false > |
using | const_iterator = robin_iterator< true > |
Public Member Functions | |
robin_hash (size_type bucket_count, const Hash &hash, const KeyEqual &equal, const Allocator &alloc, float min_load_factor=DEFAULT_MIN_LOAD_FACTOR, float max_load_factor=DEFAULT_MAX_LOAD_FACTOR) | |
robin_hash (const robin_hash &other) | |
robin_hash (robin_hash &&other) noexcept(std::is_nothrow_move_constructible< Hash >::value &&std::is_nothrow_move_constructible< KeyEqual >::value &&std::is_nothrow_move_constructible< GrowthPolicy >::value &&std::is_nothrow_move_constructible< buckets_container_type >::value) | |
robin_hash & | operator= (const robin_hash &other) |
robin_hash & | operator= (robin_hash &&other) |
allocator_type | get_allocator () const |
iterator | begin () noexcept |
const_iterator | begin () const noexcept |
const_iterator | cbegin () const noexcept |
iterator | end () noexcept |
const_iterator | end () const noexcept |
const_iterator | cend () const noexcept |
bool | empty () const noexcept |
size_type | size () const noexcept |
size_type | max_size () const noexcept |
void | clear () noexcept |
template<typename P > | |
std::pair< iterator, bool > | insert (P &&value) |
template<typename P > | |
iterator | insert_hint (const_iterator hint, P &&value) |
template<class InputIt > | |
void | insert (InputIt first, InputIt last) |
template<class K , class M > | |
std::pair< iterator, bool > | insert_or_assign (K &&key, M &&obj) |
template<class K , class M > | |
iterator | insert_or_assign (const_iterator hint, K &&key, M &&obj) |
template<class... Args> | |
std::pair< iterator, bool > | emplace (Args &&...args) |
template<class... Args> | |
iterator | emplace_hint (const_iterator hint, Args &&...args) |
template<class K , class... Args> | |
std::pair< iterator, bool > | try_emplace (K &&key, Args &&...args) |
template<class K , class... Args> | |
iterator | try_emplace_hint (const_iterator hint, K &&key, Args &&...args) |
void | erase_fast (iterator pos) |
iterator | erase (iterator pos) |
iterator | erase (const_iterator pos) |
iterator | erase (const_iterator first, const_iterator last) |
template<class K > | |
size_type | erase (const K &key) |
template<class K > | |
size_type | erase (const K &key, std::size_t hash) |
void | swap (robin_hash &other) |
template<class K , class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value >::type * = nullptr> | |
U::value_type & | at (const K &key) |
template<class K , class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value >::type * = nullptr> | |
U::value_type & | at (const K &key, std::size_t hash) |
template<class K , class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value >::type * = nullptr> | |
const U::value_type & | at (const K &key) const |
template<class K , class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value >::type * = nullptr> | |
const U::value_type & | at (const K &key, std::size_t hash) const |
template<class K , class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value >::type * = nullptr> | |
U::value_type & | operator[] (K &&key) |
template<class K > | |
size_type | count (const K &key) const |
template<class K > | |
size_type | count (const K &key, std::size_t hash) const |
template<class K > | |
iterator | find (const K &key) |
template<class K > | |
iterator | find (const K &key, std::size_t hash) |
template<class K > | |
const_iterator | find (const K &key) const |
template<class K > | |
const_iterator | find (const K &key, std::size_t hash) const |
template<class K > | |
bool | contains (const K &key) const |
template<class K > | |
bool | contains (const K &key, std::size_t hash) const |
template<class K > | |
std::pair< iterator, iterator > | equal_range (const K &key) |
template<class K > | |
std::pair< iterator, iterator > | equal_range (const K &key, std::size_t hash) |
template<class K > | |
std::pair< const_iterator, const_iterator > | equal_range (const K &key) const |
template<class K > | |
std::pair< const_iterator, const_iterator > | equal_range (const K &key, std::size_t hash) const |
size_type | bucket_count () const |
size_type | max_bucket_count () const |
float | load_factor () const |
float | min_load_factor () const |
float | max_load_factor () const |
void | min_load_factor (float ml) |
void | max_load_factor (float ml) |
void | rehash (size_type count_) |
void | reserve (size_type count_) |
hasher | hash_function () const |
key_equal | key_eq () const |
iterator | mutable_iterator (const_iterator pos) |
template<class Serializer > | |
void | serialize (Serializer &serializer) const |
template<class Deserializer > | |
void | deserialize (Deserializer &deserializer, bool hash_compatible) |
Static Public Attributes | |
static const size_type | DEFAULT_INIT_BUCKETS_SIZE = 0 |
static constexpr float | DEFAULT_MAX_LOAD_FACTOR = 0.5f |
static constexpr float | MINIMUM_MAX_LOAD_FACTOR = 0.2f |
static constexpr float | MAXIMUM_MAX_LOAD_FACTOR = 0.95f |
static constexpr float | DEFAULT_MIN_LOAD_FACTOR = 0.0f |
static constexpr float | MINIMUM_MIN_LOAD_FACTOR = 0.0f |
static constexpr float | MAXIMUM_MIN_LOAD_FACTOR = 0.15f |
Internal common class used by robin_map
and robin_set
.
ValueType is what will be stored by robin_hash
(usually std::pair<Key, T>
for map and Key
for set).
KeySelect
should be a FunctionObject
which takes a ValueType
in parameter and returns a reference to the key.
ValueSelect
should be a FunctionObject
which takes a ValueType
in parameter and returns a reference to the value. ValueSelect
should be void if there is no value (in a set for example).
The strong exception guarantee only holds if the expression std::is_nothrow_swappable<ValueType>value && std::is_nothrow_move_constructible<ValueType>value
is true.
Behaviour is undefined if the destructor of ValueType
throws.
Definition at line 367 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::allocator_type = Allocator |
Definition at line 389 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::const_iterator = robin_iterator<true> |
Definition at line 395 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::const_pointer = const value_type* |
Definition at line 393 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::const_reference = const value_type& |
Definition at line 391 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::difference_type = std::ptrdiff_t |
Definition at line 386 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::hasher = Hash |
Definition at line 387 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::iterator = robin_iterator<false> |
Definition at line 394 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::key_equal = KeyEqual |
Definition at line 388 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::key_type = typename KeySelect::key_type |
Definition at line 383 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::pointer = value_type* |
Definition at line 392 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::reference = value_type& |
Definition at line 390 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::size_type = std::size_t |
Definition at line 385 of file robin_hash.h.
using pxr_tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::value_type = ValueType |
Definition at line 384 of file robin_hash.h.
|
inline |
C++11 doesn't support the creation of a std::vector with a custom allocator and 'count' default-inserted elements. The needed contructor explicit vector(size_type count, const Allocator& alloc = Allocator());
is only available in C++14 and later. We thus must resize after using the vector(const Allocator& alloc)
constructor.
We can't use vector(size_type count, const T& value, const Allocator& alloc)
as it requires the value T to be copyable.
Definition at line 588 of file robin_hash.h.
|
inline |
Definition at line 619 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 634 of file robin_hash.h.
|
inline |
Definition at line 954 of file robin_hash.h.
|
inline |
Definition at line 960 of file robin_hash.h.
|
inline |
Definition at line 967 of file robin_hash.h.
|
inline |
Definition at line 973 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 692 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 701 of file robin_hash.h.
|
inline |
Definition at line 1058 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 703 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 716 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 732 of file robin_hash.h.
|
inline |
Definition at line 1023 of file robin_hash.h.
|
inline |
Definition at line 1028 of file robin_hash.h.
|
inline |
Definition at line 989 of file robin_hash.h.
|
inline |
Definition at line 994 of file robin_hash.h.
|
inline |
Definition at line 1122 of file robin_hash.h.
|
inline |
Definition at line 803 of file robin_hash.h.
|
inline |
Definition at line 808 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 723 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 712 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 714 of file robin_hash.h.
|
inline |
Definition at line 1033 of file robin_hash.h.
|
inline |
Definition at line 1038 of file robin_hash.h.
|
inline |
Definition at line 1044 of file robin_hash.h.
|
inline |
Definition at line 1049 of file robin_hash.h.
|
inline |
Here to avoid template<class K> size_type erase(const K& key)
being used when we use an iterator
instead of a const_iterator
.
Erase bucket used a backward shift after clearing the bucket. Check if there is a new value in the bucket, if not get the next non-empty.
Definition at line 836 of file robin_hash.h.
|
inline |
Definition at line 851 of file robin_hash.h.
|
inline |
Definition at line 853 of file robin_hash.h.
|
inline |
Definition at line 917 of file robin_hash.h.
|
inline |
Definition at line 922 of file robin_hash.h.
|
inline |
Definition at line 828 of file robin_hash.h.
|
inline |
Definition at line 1003 of file robin_hash.h.
|
inline |
Definition at line 1008 of file robin_hash.h.
|
inline |
Definition at line 1013 of file robin_hash.h.
|
inline |
Definition at line 1018 of file robin_hash.h.
|
inline |
Definition at line 685 of file robin_hash.h.
|
inline |
Definition at line 1105 of file robin_hash.h.
|
inline |
Definition at line 746 of file robin_hash.h.
|
inline |
Definition at line 761 of file robin_hash.h.
|
inline |
Definition at line 751 of file robin_hash.h.
|
inline |
Definition at line 781 of file robin_hash.h.
|
inline |
Definition at line 791 of file robin_hash.h.
|
inline |
Definition at line 1107 of file robin_hash.h.
|
inline |
Definition at line 1068 of file robin_hash.h.
|
inline |
Definition at line 1060 of file robin_hash.h.
|
inline |
Definition at line 1078 of file robin_hash.h.
|
inline |
Definition at line 1085 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 727 of file robin_hash.h.
|
inline |
Definition at line 1076 of file robin_hash.h.
|
inline |
Definition at line 1080 of file robin_hash.h.
|
inline |
Definition at line 1112 of file robin_hash.h.
|
inline |
Definition at line 655 of file robin_hash.h.
|
inline |
Definition at line 678 of file robin_hash.h.
|
inline |
Definition at line 984 of file robin_hash.h.
|
inline |
Definition at line 1092 of file robin_hash.h.
|
inline |
Definition at line 1098 of file robin_hash.h.
|
inline |
Definition at line 1117 of file robin_hash.h.
|
inlinenoexcept |
Definition at line 725 of file robin_hash.h.
|
inline |
Definition at line 932 of file robin_hash.h.
|
inline |
Definition at line 813 of file robin_hash.h.
|
inline |
Definition at line 820 of file robin_hash.h.
|
static |
Definition at line 1571 of file robin_hash.h.
|
static |
Definition at line 1573 of file robin_hash.h.
|
static |
Definition at line 1577 of file robin_hash.h.
|
static |
Definition at line 1575 of file robin_hash.h.
|
static |
Definition at line 1579 of file robin_hash.h.
|
static |
Definition at line 1574 of file robin_hash.h.
|
static |
Definition at line 1578 of file robin_hash.h.