Loading...
Searching...
No Matches
robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > Class Template Reference

Implementation of a hash set using open-addressing and the robin hood hashing algorithm with backward shift deletion. More...

#include <robin_set.h>

Public Types

using key_type = typename ht::key_type
 
using value_type = typename ht::value_type
 
using size_type = typename ht::size_type
 
using difference_type = typename ht::difference_type
 
using hasher = typename ht::hasher
 
using key_equal = typename ht::key_equal
 
using allocator_type = typename ht::allocator_type
 
using reference = typename ht::reference
 
using const_reference = typename ht::const_reference
 
using pointer = typename ht::pointer
 
using const_pointer = typename ht::const_pointer
 
using iterator = typename ht::iterator
 
using const_iterator = typename ht::const_iterator
 

Public Member Functions

 robin_set (size_type bucket_count, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
 
 robin_set (size_type bucket_count, const Allocator &alloc)
 
 robin_set (size_type bucket_count, const Hash &hash, const Allocator &alloc)
 
 robin_set (const Allocator &alloc)
 
template<class InputIt >
 robin_set (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())
 
template<class InputIt >
 robin_set (InputIt first, InputIt last, size_type bucket_count, const Allocator &alloc)
 
template<class InputIt >
 robin_set (InputIt first, InputIt last, size_type bucket_count, const Hash &hash, const Allocator &alloc)
 
 robin_set (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())
 
 robin_set (std::initializer_list< value_type > init, size_type bucket_count, const Allocator &alloc)
 
 robin_set (std::initializer_list< value_type > init, size_type bucket_count, const Hash &hash, const Allocator &alloc)
 
robin_setoperator= (std::initializer_list< value_type > ilist)
 
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
 
std::pair< iterator, bool > insert (const value_type &value)
 
std::pair< iterator, bool > insert (value_type &&value)
 
iterator insert (const_iterator hint, const value_type &value)
 
iterator insert (const_iterator hint, value_type &&value)
 
template<class InputIt >
void insert (InputIt first, InputIt last)
 
void insert (std::initializer_list< value_type > ilist)
 
template<class... Args>
std::pair< iterator, bool > emplace (Args &&... args)
 Due to the way elements are stored, emplace will need to move or copy the key-value once.
 
template<class... Args>
iterator emplace_hint (const_iterator hint, Args &&... args)
 Due to the way elements are stored, emplace_hint will need to move or copy the key-value once.
 
iterator erase (iterator pos)
 
iterator erase (const_iterator pos)
 
iterator erase (const_iterator first, const_iterator last)
 
size_type erase (const key_type &key)
 
size_type erase (const key_type &key, std::size_t precalculated_hash)
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
size_type erase (const K &key)
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
size_type erase (const K &key, std::size_t precalculated_hash)
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
void swap (robin_set &other)
 
size_type count (const Key &key) const
 
size_type count (const Key &key, std::size_t precalculated_hash) const
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
size_type count (const K &key) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
size_type count (const K &key, std::size_t precalculated_hash) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
iterator find (const Key &key)
 
iterator find (const Key &key, std::size_t precalculated_hash)
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
const_iterator find (const Key &key) const
 
const_iterator find (const Key &key, std::size_t precalculated_hash) const
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
iterator find (const K &key)
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
iterator find (const K &key, std::size_t precalculated_hash)
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
const_iterator find (const K &key) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
const_iterator find (const K &key, std::size_t precalculated_hash) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
bool contains (const Key &key) const
 
bool contains (const Key &key, std::size_t precalculated_hash) const
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
bool contains (const K &key) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
bool contains (const K &key, std::size_t precalculated_hash) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
std::pair< iterator, iterator > equal_range (const Key &key)
 
std::pair< iterator, iterator > equal_range (const Key &key, std::size_t precalculated_hash)
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
std::pair< const_iterator, const_iterator > equal_range (const Key &key) const
 
std::pair< const_iterator, const_iterator > equal_range (const Key &key, std::size_t precalculated_hash) const
 Use the hash value 'precalculated_hash' instead of hashing the key.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
std::pair< iterator, iterator > equal_range (const K &key)
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
std::pair< iterator, iterator > equal_range (const K &key, std::size_t precalculated_hash)
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
std::pair< const_iterator, const_iterator > equal_range (const K &key) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
template<class K , class KE = KeyEqual, typename std::enable_if< has_is_transparent< KE >::value >::type * = nullptr>
std::pair< const_iterator, const_iterator > equal_range (const K &key, std::size_t precalculated_hash) const
 This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.
 
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)
 Set the min_load_factor to 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)
 Convert a const_iterator to an iterator.
 
template<class Serializer >
void serialize (Serializer &serializer) const
 Serialize the set through the serializer parameter.
 

Static Public Member Functions

template<class Deserializer >
static robin_set deserialize (Deserializer &deserializer, bool hash_compatible=false)
 Deserialize a previously serialized set through the deserializer parameter.
 

Friends

bool operator== (const robin_set &lhs, const robin_set &rhs)
 
bool operator!= (const robin_set &lhs, const robin_set &rhs)
 
void swap (robin_set &lhs, robin_set &rhs)
 

Detailed Description

template<class Key, class Hash = std::hash<Key>, class KeyEqual = std::equal_to<Key>, class Allocator = std::allocator<Key>, bool StoreHash = false, class GrowthPolicy = pxr_tsl::rh::power_of_two_growth_policy<2>>
class pxr_tsl::robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >

Implementation of a hash set using open-addressing and the robin hood hashing algorithm with backward shift deletion.

For operations modifying the hash set (insert, erase, rehash, ...), the strong exception guarantee is only guaranteed when the expression std::is_nothrow_swappable<Key>::value && std::is_nothrow_move_constructible<Key>::value is true, otherwise if an exception is thrown during the swap or the move, the hash set may end up in a undefined state. Per the standard a Key with a noexcept copy constructor and no move constructor also satisfies the std::is_nothrow_move_constructible<Key>::value criterion (and will thus guarantee the strong exception for the set).

When StoreHash is true, 32 bits of the hash are stored alongside the values. It can improve the performance during lookups if the KeyEqual function takes time (or engenders a cache-miss for example) as we then compare the stored hashes before comparing the keys. When pxr_tsl::rh::power_of_two_growth_policy is used as GrowthPolicy, it may also speed-up the rehash process as we can avoid to recalculate the hash. When it is detected that storing the hash will not incur any memory penalty due to alignment (i.e. sizeof(pxr_tsl::detail_robin_hash::bucket_entry<ValueType, true>) == sizeof(pxr_tsl::detail_robin_hash::bucket_entry<ValueType, false>)) and pxr_tsl::rh::power_of_two_growth_policy is used, the hash will be stored even if StoreHash is false so that we can speed-up the rehash (but it will not be used on lookups unless StoreHash is true).

GrowthPolicy defines how the set grows and consequently how a hash value is mapped to a bucket. By default the set uses pxr_tsl::rh::power_of_two_growth_policy. This policy keeps the number of buckets to a power of two and uses a mask to set the hash to a bucket instead of the slow modulo. Other growth policies are available and you may define your own growth policy, check pxr_tsl::rh::power_of_two_growth_policy for the interface.

Key must be swappable.

Key must be copy and/or move constructible.

If the destructor of Key throws an exception, the behaviour of the class is undefined.

Iterators invalidation:

  • clear, operator=, reserve, rehash: always invalidate the iterators.
  • insert, emplace, emplace_hint, operator[]: if there is an effective insert, invalidate the iterators.
  • erase: always invalidate the iterators.

Definition at line 95 of file robin_set.h.

Member Typedef Documentation

◆ allocator_type

using allocator_type = typename ht::allocator_type

Definition at line 119 of file robin_set.h.

◆ const_iterator

using const_iterator = typename ht::const_iterator

Definition at line 125 of file robin_set.h.

◆ const_pointer

using const_pointer = typename ht::const_pointer

Definition at line 123 of file robin_set.h.

◆ const_reference

using const_reference = typename ht::const_reference

Definition at line 121 of file robin_set.h.

◆ difference_type

using difference_type = typename ht::difference_type

Definition at line 116 of file robin_set.h.

◆ hasher

using hasher = typename ht::hasher

Definition at line 117 of file robin_set.h.

◆ iterator

using iterator = typename ht::iterator

Definition at line 124 of file robin_set.h.

◆ key_equal

using key_equal = typename ht::key_equal

Definition at line 118 of file robin_set.h.

◆ key_type

using key_type = typename ht::key_type

Definition at line 113 of file robin_set.h.

◆ pointer

using pointer = typename ht::pointer

Definition at line 122 of file robin_set.h.

◆ reference

using reference = typename ht::reference

Definition at line 120 of file robin_set.h.

◆ size_type

using size_type = typename ht::size_type

Definition at line 115 of file robin_set.h.

◆ value_type

using value_type = typename ht::value_type

Definition at line 114 of file robin_set.h.

Constructor & Destructor Documentation

◆ robin_set() [1/11]

robin_set ( )
inline

Definition at line 130 of file robin_set.h.

◆ robin_set() [2/11]

robin_set ( size_type  bucket_count,
const Hash &  hash = Hash(),
const KeyEqual &  equal = KeyEqual(),
const Allocator &  alloc = Allocator() 
)
inlineexplicit

Definition at line 132 of file robin_set.h.

◆ robin_set() [3/11]

robin_set ( size_type  bucket_count,
const Allocator &  alloc 
)
inline

Definition at line 137 of file robin_set.h.

◆ robin_set() [4/11]

robin_set ( size_type  bucket_count,
const Hash &  hash,
const Allocator &  alloc 
)
inline

Definition at line 140 of file robin_set.h.

◆ robin_set() [5/11]

robin_set ( const Allocator &  alloc)
inlineexplicit

Definition at line 143 of file robin_set.h.

◆ robin_set() [6/11]

robin_set ( 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() 
)
inline

Definition at line 147 of file robin_set.h.

◆ robin_set() [7/11]

robin_set ( InputIt  first,
InputIt  last,
size_type  bucket_count,
const Allocator &  alloc 
)
inline

Definition at line 156 of file robin_set.h.

◆ robin_set() [8/11]

robin_set ( InputIt  first,
InputIt  last,
size_type  bucket_count,
const Hash &  hash,
const Allocator &  alloc 
)
inline

Definition at line 161 of file robin_set.h.

◆ robin_set() [9/11]

robin_set ( 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() 
)
inline

Definition at line 165 of file robin_set.h.

◆ robin_set() [10/11]

robin_set ( std::initializer_list< value_type >  init,
size_type  bucket_count,
const Allocator &  alloc 
)
inline

Definition at line 171 of file robin_set.h.

◆ robin_set() [11/11]

robin_set ( std::initializer_list< value_type >  init,
size_type  bucket_count,
const Hash &  hash,
const Allocator &  alloc 
)
inline

Definition at line 176 of file robin_set.h.

Member Function Documentation

◆ begin() [1/2]

const_iterator begin ( ) const
inlinenoexcept

Definition at line 196 of file robin_set.h.

◆ begin() [2/2]

iterator begin ( )
inlinenoexcept

Definition at line 195 of file robin_set.h.

◆ bucket_count()

size_type bucket_count ( ) const
inline

Definition at line 532 of file robin_set.h.

◆ cbegin()

const_iterator cbegin ( ) const
inlinenoexcept

Definition at line 197 of file robin_set.h.

◆ cend()

const_iterator cend ( ) const
inlinenoexcept

Definition at line 201 of file robin_set.h.

◆ clear()

void clear ( )
inlinenoexcept

Definition at line 213 of file robin_set.h.

◆ contains() [1/4]

bool contains ( const K &  key) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 437 of file robin_set.h.

◆ contains() [2/4]

bool contains ( const K &  key,
std::size_t  precalculated_hash 
) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 451 of file robin_set.h.

◆ contains() [3/4]

bool contains ( const Key &  key) const
inline

Definition at line 418 of file robin_set.h.

◆ contains() [4/4]

bool contains ( const Key &  key,
std::size_t  precalculated_hash 
) const
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 425 of file robin_set.h.

◆ count() [1/4]

size_type count ( const K &  key) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 330 of file robin_set.h.

◆ count() [2/4]

size_type count ( const K &  key,
std::size_t  precalculated_hash 
) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 344 of file robin_set.h.

◆ count() [3/4]

size_type count ( const Key &  key) const
inline

Definition at line 311 of file robin_set.h.

◆ count() [4/4]

size_type count ( const Key &  key,
std::size_t  precalculated_hash 
) const
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 318 of file robin_set.h.

◆ deserialize()

static robin_set deserialize ( Deserializer &  deserializer,
bool  hash_compatible = false 
)
inlinestatic

Deserialize a previously serialized set through the deserializer parameter.

The deserializer parameter must be a function object that supports the following call:

  • template<typename U> U operator()(); where the types std::int16_t, std::uint32_t, std::uint64_t, float and Key must be supported for U.

If the deserialized hash set type is hash compatible with the serialized set, the deserialization process can be sped up by setting hash_compatible to true. To be hash compatible, the Hash, KeyEqual and GrowthPolicy must behave the same way than the ones used on the serialized set and the StoreHash must have the same value. The std::size_t must also be of the same size as the one on the platform used to serialize the set. If these criteria are not met, the behaviour is undefined with hash_compatible sets to true.

The behaviour is undefined if the type Key of the robin_set is not the same as the type used during serialization.

The implementation leaves binary compatibility (endianness, IEEE 754 for floats, size of int, ...) of the types it deserializes in the hands of the Deserializer function object if compatibility is required.

Definition at line 635 of file robin_set.h.

◆ emplace()

std::pair< iterator, bool > emplace ( Args &&...  args)
inline

Due to the way elements are stored, emplace will need to move or copy the key-value once.

The method is equivalent to insert(value_type(std::forward<Args>(args)...));

Mainly here for compatibility with the std::unordered_map interface.

Definition at line 248 of file robin_set.h.

◆ emplace_hint()

iterator emplace_hint ( const_iterator  hint,
Args &&...  args 
)
inline

Due to the way elements are stored, emplace_hint will need to move or copy the key-value once.

The method is equivalent to insert(hint, value_type(std::forward<Args>(args)...));

Mainly here for compatibility with the std::unordered_map interface.

Definition at line 260 of file robin_set.h.

◆ empty()

bool empty ( ) const
inlinenoexcept

Definition at line 206 of file robin_set.h.

◆ end() [1/2]

const_iterator end ( ) const
inlinenoexcept

Definition at line 200 of file robin_set.h.

◆ end() [2/2]

iterator end ( )
inlinenoexcept

Definition at line 199 of file robin_set.h.

◆ equal_range() [1/8]

std::pair< iterator, iterator > equal_range ( const K &  key)
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 489 of file robin_set.h.

◆ equal_range() [2/8]

std::pair< const_iterator, const_iterator > equal_range ( const K &  key) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 514 of file robin_set.h.

◆ equal_range() [3/8]

std::pair< iterator, iterator > equal_range ( const K &  key,
std::size_t  precalculated_hash 
)
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 503 of file robin_set.h.

◆ equal_range() [4/8]

std::pair< const_iterator, const_iterator > equal_range ( const K &  key,
std::size_t  precalculated_hash 
) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 524 of file robin_set.h.

◆ equal_range() [5/8]

std::pair< iterator, iterator > equal_range ( const Key &  key)
inline

Definition at line 455 of file robin_set.h.

◆ equal_range() [6/8]

std::pair< const_iterator, const_iterator > equal_range ( const Key &  key) const
inline

Definition at line 469 of file robin_set.h.

◆ equal_range() [7/8]

std::pair< iterator, iterator > equal_range ( const Key &  key,
std::size_t  precalculated_hash 
)
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 464 of file robin_set.h.

◆ equal_range() [8/8]

std::pair< const_iterator, const_iterator > equal_range ( const Key &  key,
std::size_t  precalculated_hash 
) const
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 476 of file robin_set.h.

◆ erase() [1/7]

size_type erase ( const K &  key)
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 288 of file robin_set.h.

◆ erase() [2/7]

size_type erase ( const K &  key,
std::size_t  precalculated_hash 
)
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup to the value if you already have the hash.

Definition at line 302 of file robin_set.h.

◆ erase() [3/7]

size_type erase ( const key_type &  key)
inline

Definition at line 269 of file robin_set.h.

◆ erase() [4/7]

size_type erase ( const key_type &  key,
std::size_t  precalculated_hash 
)
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup to the value if you already have the hash.

Definition at line 276 of file robin_set.h.

◆ erase() [5/7]

iterator erase ( const_iterator  first,
const_iterator  last 
)
inline

Definition at line 266 of file robin_set.h.

◆ erase() [6/7]

iterator erase ( const_iterator  pos)
inline

Definition at line 265 of file robin_set.h.

◆ erase() [7/7]

iterator erase ( iterator  pos)
inline

Definition at line 264 of file robin_set.h.

◆ find() [1/8]

iterator find ( const K &  key)
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 376 of file robin_set.h.

◆ find() [2/8]

const_iterator find ( const K &  key) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Definition at line 400 of file robin_set.h.

◆ find() [3/8]

iterator find ( const K &  key,
std::size_t  precalculated_hash 
)
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 390 of file robin_set.h.

◆ find() [4/8]

const_iterator find ( const K &  key,
std::size_t  precalculated_hash 
) const
inline

This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists.

If so, K must be hashable and comparable to Key.

Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 414 of file robin_set.h.

◆ find() [5/8]

iterator find ( const Key &  key)
inline

Definition at line 348 of file robin_set.h.

◆ find() [6/8]

const_iterator find ( const Key &  key) const
inline

Definition at line 359 of file robin_set.h.

◆ find() [7/8]

iterator find ( const Key &  key,
std::size_t  precalculated_hash 
)
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 355 of file robin_set.h.

◆ find() [8/8]

const_iterator find ( const Key &  key,
std::size_t  precalculated_hash 
) const
inline

Use the hash value 'precalculated_hash' instead of hashing the key.

The hash value should be the same as hash_function()(key). Useful to speed-up the lookup if you already have the hash.

Definition at line 364 of file robin_set.h.

◆ get_allocator()

allocator_type get_allocator ( ) const
inline

Definition at line 190 of file robin_set.h.

◆ hash_function()

hasher hash_function ( ) const
inline

Definition at line 561 of file robin_set.h.

◆ insert() [1/6]

std::pair< iterator, bool > insert ( const value_type &  value)
inline

Definition at line 215 of file robin_set.h.

◆ insert() [2/6]

iterator insert ( const_iterator  hint,
const value_type &  value 
)
inline

Definition at line 223 of file robin_set.h.

◆ insert() [3/6]

iterator insert ( const_iterator  hint,
value_type &&  value 
)
inline

Definition at line 227 of file robin_set.h.

◆ insert() [4/6]

void insert ( InputIt  first,
InputIt  last 
)
inline

Definition at line 232 of file robin_set.h.

◆ insert() [5/6]

void insert ( std::initializer_list< value_type >  ilist)
inline

Definition at line 236 of file robin_set.h.

◆ insert() [6/6]

std::pair< iterator, bool > insert ( value_type &&  value)
inline

Definition at line 219 of file robin_set.h.

◆ key_eq()

key_equal key_eq ( ) const
inline

Definition at line 562 of file robin_set.h.

◆ load_factor()

float load_factor ( ) const
inline

Definition at line 538 of file robin_set.h.

◆ max_bucket_count()

size_type max_bucket_count ( ) const
inline

Definition at line 533 of file robin_set.h.

◆ max_load_factor() [1/2]

float max_load_factor ( ) const
inline

Definition at line 541 of file robin_set.h.

◆ max_load_factor() [2/2]

void max_load_factor ( float  ml)
inline

Definition at line 553 of file robin_set.h.

◆ max_size()

size_type max_size ( ) const
inlinenoexcept

Definition at line 208 of file robin_set.h.

◆ min_load_factor() [1/2]

float min_load_factor ( ) const
inline

Definition at line 540 of file robin_set.h.

◆ min_load_factor() [2/2]

void min_load_factor ( float  ml)
inline

Set the min_load_factor to ml.

When the load_factor of the set goes below min_load_factor after some erase operations, the set will be shrunk when an insertion occurs. The erase method itself never shrinks the set.

The default value of min_load_factor is 0.0f, the set never shrinks by default.

Definition at line 552 of file robin_set.h.

◆ mutable_iterator()

iterator mutable_iterator ( const_iterator  pos)
inline

Convert a const_iterator to an iterator.

Definition at line 571 of file robin_set.h.

◆ operator=()

robin_set & operator= ( std::initializer_list< value_type >  ilist)
inline

Definition at line 181 of file robin_set.h.

◆ rehash()

void rehash ( size_type  count_)
inline

Definition at line 555 of file robin_set.h.

◆ reserve()

void reserve ( size_type  count_)
inline

Definition at line 556 of file robin_set.h.

◆ serialize()

void serialize ( Serializer &  serializer) const
inline

Serialize the set through the serializer parameter.

The serializer parameter must be a function object that supports the following call:

  • template<typename U> void operator()(const U& value); where the types std::int16_t, std::uint32_t, std::uint64_t, float and Key must be supported for U.

The implementation leaves binary compatibility (endianness, IEEE 754 for floats, ...) of the types it serializes in the hands of the Serializer function object if compatibility is required.

Definition at line 604 of file robin_set.h.

◆ size()

size_type size ( ) const
inlinenoexcept

Definition at line 207 of file robin_set.h.

◆ swap()

void swap ( robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  other)
inline

Definition at line 306 of file robin_set.h.

Friends And Related Function Documentation

◆ operator!=

bool operator!= ( const robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  lhs,
const robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  rhs 
)
friend

Definition at line 643 of file robin_set.h.

◆ operator==

bool operator== ( const robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  lhs,
const robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  rhs 
)
friend

Definition at line 575 of file robin_set.h.

◆ swap

void swap ( robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  lhs,
robin_set< Key, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > &  rhs 
)
friend

Definition at line 647 of file robin_set.h.


The documentation for this class was generated from the following file: