nfx-containers 0.6.0
Modern C++20 header-only library providing high-performance hash containers with Robin Hood and perfect hashing
Loading...
Searching...
No Matches
nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > Class Template Referencefinal

Hash set with Robin Hood hashing for bounded probe distances and predictable performance. More...

#include <nfx/containers/FastHashSet.h>

Classes

class  Iterator
 Forward iterator for FastHashSet that skips empty buckets. More...
class  ConstIterator
 Const forward iterator for FastHashSet that skips empty buckets. More...

Public Types

using key_type = TKey
 Type alias for key type.
using value_type = TKey
 Type alias for value type (same as key for sets).
using hasher = THasher
 Type alias for hasher type.
using key_equal = KeyEqual
 Type alias for key equality comparator.
using hash_type = HashType
 Type alias for hash type (uint32_t or uint64_t).
using size_type = size_t
 Type alias for size type.
using difference_type = std::ptrdiff_t
 Type alias for difference type.
using iterator = Iterator
 Type alias for iterator.
using const_iterator = ConstIterator
 Type alias for const iterator.

Public Member Functions

 FastHashSet ()
 Default constructor with initial capacity of 32 elements.
 FastHashSet (std::initializer_list< TKey > init)
 Construct set from initializer_list.
template<typename InputIt>
 FastHashSet (InputIt first, InputIt last)
 Construct set from iterator range.
 FastHashSet (size_t initialCapacity)
 Constructor with specified initial capacity.
 FastHashSet (FastHashSet &&other) noexcept
 Move constructor.
FastHashSetoperator= (FastHashSet &&other) noexcept
 Move assignment operator.
 FastHashSet (const FastHashSet &)=default
 Copy constructor.
FastHashSetoperator= (const FastHashSet &)=default
 Copy assignment operator.
 ~FastHashSet ()=default
 Destructor.
template<typename KeyType = TKey>
const TKey * find (const KeyType &key) const noexcept
 Fast lookup with heterogeneous key types (C++ idiom: pointer return).
template<typename KeyType = TKey>
bool contains (const KeyType &key) const noexcept
 Check if a key exists in the set.
template<typename KeyType = TKey>
const TKey & at (const KeyType &key) const
 Checked element access with bounds checking.
bool insert (const TKey &key)
 Insert a key into the set (copy semantics).
bool insert (TKey &&key)
 Insert a key into the set (move semantics).
template<typename... Args>
bool emplace (Args &&... args)
 Construct and insert a key in-place.
template<typename... Args>
std::pair< Iterator, bool > tryEmplace (Args &&... args)
 Try to emplace a key if it doesn't exist.
void reserve (size_t minCapacity)
 Reserve capacity for at least the specified number of elements.
template<typename KeyType = TKey>
bool erase (const KeyType &key) noexcept
 Remove a key from the set.
Iterator erase (ConstIterator pos) noexcept
 Erase element at iterator position.
Iterator erase (ConstIterator first, ConstIterator last) noexcept
 Erase range of elements.
void clear () noexcept
 Clear all elements from the set.
template<typename KeyType = TKey>
std::optional< TKey > extract (const KeyType &key)
 Extract and remove a key from the set.
void merge (FastHashSet &other)
 Merge elements from another set into this set.
void merge (FastHashSet &&other)
 Merge elements from another set into this set (rvalue overload).
size_t size () const noexcept
 Get the number of elements in the set.
size_t capacity () const noexcept
 Get the current capacity of the hash table.
bool isEmpty () const noexcept
 Check if the set is empty.
void swap (FastHashSet &other) noexcept
 Swap contents with another set.
Iterator begin () noexcept
 Get iterator to beginning of occupied buckets.
ConstIterator begin () const noexcept
 Get const iterator to beginning of occupied buckets.
Iterator end () noexcept
 Get iterator to end (past last occupied bucket).
ConstIterator end () const noexcept
 Get const iterator to end (past last occupied bucket).
ConstIterator cbegin () const noexcept
 Get const iterator to beginning of occupied buckets (explicit const).
ConstIterator cend () const noexcept
 Get const iterator to end (explicit const).
bool operator== (const FastHashSet &other) const noexcept
 Compare two FastHashSets for equality.

Detailed Description

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
class nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >

Hash set with Robin Hood hashing for bounded probe distances and predictable performance.

Template Parameters
TKeyKey type (supports heterogeneous lookup for compatible types like string_view)
HashTypeHash type - either uint32_t or uint64_t (default: uint32_t)
SeedHash seed value for initialization (default: FNV offset basis for HashType)
THasherHash functor type (default: hashing::Hasher<HashType, Seed>)
KeyEqualKey equality comparator (default: std::equal_to<> for transparent comparison)

Definition at line 71 of file FastHashSet.h.

Member Typedef Documentation

◆ const_iterator

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::const_iterator = ConstIterator

Type alias for const iterator.

Definition at line 123 of file FastHashSet.h.

◆ difference_type

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::difference_type = std::ptrdiff_t

Type alias for difference type.

Definition at line 117 of file FastHashSet.h.

◆ hash_type

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::hash_type = HashType

Type alias for hash type (uint32_t or uint64_t).

Definition at line 111 of file FastHashSet.h.

◆ hasher

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::hasher = THasher

Type alias for hasher type.

Definition at line 105 of file FastHashSet.h.

◆ iterator

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::iterator = Iterator

Type alias for iterator.

Definition at line 120 of file FastHashSet.h.

◆ key_equal

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::key_equal = KeyEqual

Type alias for key equality comparator.

Definition at line 108 of file FastHashSet.h.

◆ key_type

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::key_type = TKey

Type alias for key type.

Definition at line 99 of file FastHashSet.h.

◆ size_type

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::size_type = size_t

Type alias for size type.

Definition at line 114 of file FastHashSet.h.

◆ value_type

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
using nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::value_type = TKey

Type alias for value type (same as key for sets).

Definition at line 102 of file FastHashSet.h.

Constructor & Destructor Documentation

◆ FastHashSet() [1/5]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::FastHashSet ( )
inline

Default constructor with initial capacity of 32 elements.

Initializes hash table with power-of-2 capacity for optimal bitwise operations and cache-friendly memory layout

◆ FastHashSet() [2/5]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::FastHashSet ( std::initializer_list< TKey > init)
inline

Construct set from initializer_list.

Parameters
initInitializer list of keys

◆ FastHashSet() [3/5]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename InputIt>
nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::FastHashSet ( InputIt first,
InputIt last )
inline

Construct set from iterator range.

Template Parameters
InputItInput iterator type (must dereference to TKey)
Parameters
firstBeginning of range to copy from
lastEnd of range (exclusive)

◆ FastHashSet() [4/5]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::FastHashSet ( size_t initialCapacity)
inlineexplicit

Constructor with specified initial capacity.

Parameters
initialCapacityMinimum initial capacity (rounded up to power of 2)

Capacity will be rounded up to next power of 2 for optimal hash distribution and bitwise mask operations

◆ FastHashSet() [5/5]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::FastHashSet ( FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > && other)
inlinenoexcept

Move constructor.

Parameters
otherSet to move from (will be left in valid but empty state)

Member Function Documentation

◆ at()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename KeyType = TKey>
const TKey & nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::at ( const KeyType & key) const
inline

Checked element access with bounds checking.

Template Parameters
KeyTypeKey type (supports heterogeneous lookup)
Parameters
keyThe key to access
Returns
Const reference to the key
Exceptions
std::out_of_rangeif key is not found
Note
For sets, at() returns the key itself (useful for retrieving stored key)

◆ begin() [1/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
ConstIterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::begin ( ) const
nodiscardnoexcept

Get const iterator to beginning of occupied buckets.

Returns
Const iterator pointing to first key
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ begin() [2/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
Iterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::begin ( )
nodiscardnoexcept

Get iterator to beginning of occupied buckets.

Returns
Iterator pointing to first key
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ capacity()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
size_t nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::capacity ( ) const
inlinenodiscardnoexcept

Get the current capacity of the hash table.

Returns
Maximum elements before resize (always power of 2)
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ cbegin()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
ConstIterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::cbegin ( ) const
nodiscardnoexcept

Get const iterator to beginning of occupied buckets (explicit const).

Returns
Const iterator pointing to first key
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ cend()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
ConstIterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::cend ( ) const
nodiscardnoexcept

Get const iterator to end (explicit const).

Returns
Const iterator pointing past the last key
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ contains()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename KeyType = TKey>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::contains ( const KeyType & key) const
inlinenodiscardnoexcept

Check if a key exists in the set.

Template Parameters
KeyTypeKey type (supports heterogeneous lookup for compatible types)
Parameters
keyThe key to search for
Returns
true if key exists, false otherwise
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ emplace()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename... Args>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::emplace ( Args &&... args)
inline

Construct and insert a key in-place.

Template Parameters
ArgsConstructor argument types for TKey
Parameters
argsArguments forwarded to TKey constructor
Returns
true if key was inserted, false if key already exists

Constructs key in-place using perfect forwarding, avoiding unnecessary copies

◆ end() [1/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
ConstIterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::end ( ) const
nodiscardnoexcept

Get const iterator to end (past last occupied bucket).

Returns
Const iterator pointing past the last key
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ end() [2/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
Iterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::end ( )
nodiscardnoexcept

Get iterator to end (past last occupied bucket).

Returns
Iterator pointing past the last key
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ erase() [1/3]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename KeyType = TKey>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::erase ( const KeyType & key)
inlinenoexcept

Remove a key from the set.

Template Parameters
KeyTypeKey type (supports heterogeneous lookup for compatible types)
Parameters
keyThe key to remove
Returns
true if the key was found and removed, false otherwise

◆ erase() [2/3]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
Iterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::erase ( ConstIterator first,
ConstIterator last )
inlinenoexcept

Erase range of elements.

Parameters
firstBeginning of range to erase
lastEnd of range to erase (exclusive)
Returns
Iterator to the element following the last erased element

◆ erase() [3/3]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
Iterator nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::erase ( ConstIterator pos)
inlinenoexcept

Erase element at iterator position.

Parameters
posIterator to element to erase
Returns
Iterator to the element following the erased element
Note
Iterator becomes invalid after erase

◆ extract()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename KeyType = TKey>
std::optional< TKey > nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::extract ( const KeyType & key)
inlinenodiscard

Extract and remove a key from the set.

Template Parameters
KeyTypeKey type (supports heterogeneous lookup for compatible types)
Parameters
keyThe key to extract
Returns
std::optional containing the extracted key if found, std::nullopt otherwise

Removes the key from the set and returns it. If the key is not found, returns std::nullopt. This operation invalidates iterators to the extracted element.

Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ find()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename KeyType = TKey>
const TKey * nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::find ( const KeyType & key) const
inlinenodiscardnoexcept

Fast lookup with heterogeneous key types (C++ idiom: pointer return).

Template Parameters
KeyTypeKey type (supports heterogeneous lookup for compatible types)
Parameters
keyThe key to search for
Returns
Pointer to the key if found, nullptr otherwise
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ insert() [1/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::insert ( const TKey & key)
inline

Insert a key into the set (copy semantics).

Parameters
keyThe key to insert
Returns
true if key was inserted, false if key already exists

◆ insert() [2/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::insert ( TKey && key)
inline

Insert a key into the set (move semantics).

Parameters
keyThe key to insert (moved)
Returns
true if key was inserted, false if key already exists

◆ isEmpty()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::isEmpty ( ) const
inlinenodiscardnoexcept

Check if the set is empty.

Returns
true if size() == 0, false otherwise
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ merge() [1/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
void nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::merge ( FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > && other)
inline

Merge elements from another set into this set (rvalue overload).

Parameters
otherSource set to merge from (modified - unique elements are moved out)

◆ merge() [2/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
void nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::merge ( FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > & other)
inline

Merge elements from another set into this set.

Parameters
otherSource set to merge from (modified - unique elements are moved out)

Attempts to move each element from 'other' into this set. Elements that already exist in this set (duplicates) remain in 'other'. After merge, 'other' contains only elements that were duplicates.

◆ operator=() [1/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
FastHashSet & nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::operator= ( const FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > & )
default

Copy assignment operator.

Returns
Reference to this set

◆ operator=() [2/2]

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
FastHashSet & nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::operator= ( FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > && other)
inlinenoexcept

Move assignment operator.

Parameters
otherSet to move from (will be left in valid but empty state)
Returns
Reference to this set

◆ operator==()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
bool nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::operator== ( const FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > & other) const
nodiscardnoexcept

Compare two FastHashSets for equality.

Parameters
otherThe other FastHashSet to compare with
Returns
true if both sets contain the same keys, false otherwise
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ reserve()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
void nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::reserve ( size_t minCapacity)
inline

Reserve capacity for at least the specified number of elements.

Parameters
minCapacityMinimum capacity to reserve

Resizes hash table to accommodate at least minCapacity elements without triggering automatic resize. Capacity rounded to power of 2. Rehashes all existing elements to new table layout.

◆ size()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
size_t nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::size ( ) const
inlinenodiscardnoexcept

Get the number of elements in the set.

Returns
Current number of keys stored
Note
This function is marked [[nodiscard]] - the return value should not be ignored

◆ swap()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
void nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::swap ( FastHashSet< TKey, HashType, Seed, THasher, KeyEqual > & other)
inlinenoexcept

Swap contents with another set.

Parameters
otherSet to swap with
Note
noexcept operation - just swaps internal pointers/values

◆ tryEmplace()

template<typename TKey, hashing::Hash32or64 HashType = uint32_t, HashType Seed = ( sizeof( HashType ) == 4 ? hashing::constants::FNV_OFFSET_BASIS_32 : hashing::constants::FNV_OFFSET_BASIS_64 ), typename THasher = hashing::Hasher<HashType, Seed>, typename KeyEqual = std::equal_to<>>
template<typename... Args>
std::pair< Iterator, bool > nfx::containers::FastHashSet< TKey, HashType, Seed, THasher, KeyEqual >::tryEmplace ( Args &&... args)
inline

Try to emplace a key if it doesn't exist.

Template Parameters
ArgsVariadic template for key constructor arguments
Parameters
argsArguments forwarded to TKey constructor (only used if key doesn't exist)
Returns
Pair of iterator to element and bool (true if inserted, false if key existed)
Note
More efficient than emplace() - doesn't construct key if it already exists

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