|
nfx-containers 0.6.0
Modern C++20 header-only library providing high-performance hash containers with Robin Hood and perfect hashing
|
Hash map with Robin Hood hashing and insertion-order preservation. More...
#include <nfx/containers/OrderedHashMap.h>
Classes | |
| class | Iterator |
| Iterator for OrderedHashMap that follows insertion order. More... | |
| class | ConstIterator |
| Const iterator for OrderedHashMap that follows insertion order. More... | |
Public Types | |
| using | key_type = TKey |
| Type alias for key type. | |
| using | mapped_type = TValue |
| Type alias for mapped value type. | |
| using | value_type = std::pair<const TKey, TValue> |
| Type alias for key-value pair type. | |
| 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 | |
| OrderedHashMap () | |
| Default constructor with initial capacity of 32 elements. | |
| OrderedHashMap (std::initializer_list< std::pair< TKey, TValue > > init) | |
| Construct map from initializer_list. | |
| template<typename InputIt> | |
| OrderedHashMap (InputIt first, InputIt last) | |
| Construct map from iterator range. | |
| OrderedHashMap (size_t initialCapacity) | |
| Constructor with specified initial capacity. | |
| OrderedHashMap (OrderedHashMap &&other) noexcept | |
| Move constructor. | |
| OrderedHashMap & | operator= (OrderedHashMap &&other) noexcept |
| Move assignment operator. | |
| OrderedHashMap (const OrderedHashMap &other) | |
| Copy constructor. | |
| OrderedHashMap & | operator= (const OrderedHashMap &other) |
| Copy assignment operator. | |
| ~OrderedHashMap () | |
| Destructor. | |
| template<typename KeyType = TKey> | |
| TValue * | find (const KeyType &key) noexcept |
| Fast lookup with heterogeneous key types (C++ idiom: pointer return). | |
| template<typename KeyType = TKey> | |
| const TValue * | find (const KeyType &key) const noexcept |
| Fast const 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 map. | |
| TValue & | at (const TKey &key) |
| Checked element access with bounds checking. | |
| const TValue & | at (const TKey &key) const |
| Checked const element access with bounds checking. | |
| TValue & | operator[] (const TKey &key) |
| STL-compatible subscript operator (insert-if-missing). | |
| TValue & | operator[] (TKey &&key) |
| STL-compatible subscript operator with move semantics. | |
| template<typename KeyType = TKey> | |
| TValue & | at (const KeyType &key) |
| Checked element access with bounds checking. | |
| template<typename KeyType = TKey> | |
| const TValue & | at (const KeyType &key) const |
| Checked const element access with bounds checking. | |
| bool | insert (const TKey &key, const TValue &value) |
| Insert a key-value pair only if key doesn't exist (copy semantics). | |
| bool | insert (const TKey &key, TValue &&value) |
| Insert a key-value pair only if key doesn't exist (move semantics). | |
| bool | insert (TKey &&key, TValue &&value) |
| Insert a key-value pair only if key doesn't exist (perfect forwarding). | |
| void | insertOrAssign (const TKey &key, TValue &&value) |
| Insert or update a key-value pair (move semantics). | |
| void | insertOrAssign (const TKey &key, const TValue &value) |
| Insert or update a key-value pair (copy semantics). | |
| void | insertOrAssign (TKey &&key, TValue &&value) |
| Insert or update a key-value pair (perfect forwarding for both key and value). | |
| template<typename... Args> | |
| void | emplace (const TKey &key, Args &&... args) |
| Emplace a value in-place for the given key. | |
| template<typename... Args> | |
| void | emplace (TKey &&key, Args &&... args) |
| Emplace a value in-place for the given key (move key). | |
| template<typename... Args> | |
| std::pair< Iterator, bool > | tryEmplace (const TKey &key, Args &&... args) |
| Try to emplace a value if key doesn't exist. | |
| template<typename... Args> | |
| std::pair< Iterator, bool > | tryEmplace (TKey &&key, Args &&... args) |
| Try to emplace a value if key 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-value pair from the map. | |
| 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 map. | |
| template<typename KeyType = TKey> | |
| std::optional< std::pair< TKey, TValue > > | extract (const KeyType &key) |
| Extract and remove a key-value pair from the map. | |
| void | merge (OrderedHashMap &other) |
| Merge elements from another map into this map. | |
| void | merge (OrderedHashMap &&other) |
| Merge elements from another map into this map (rvalue overload). | |
| size_t | size () const noexcept |
| Get the number of elements in the map. | |
| size_t | capacity () const noexcept |
| Get the current capacity of the hash table. | |
| bool | isEmpty () const noexcept |
| Check if the map is empty. | |
| void | swap (OrderedHashMap &other) noexcept |
| Swap contents with another map. | |
| Iterator | begin () noexcept |
| Get iterator to first element in insertion order. | |
| ConstIterator | begin () const noexcept |
| Get const iterator to first element in insertion order. | |
| Iterator | end () noexcept |
| Get iterator to end (past last element in insertion order). | |
| ConstIterator | end () const noexcept |
| Get const iterator to end (past last element in insertion order). | |
| ConstIterator | cbegin () const noexcept |
| Get const iterator to first element in insertion order (explicit const). | |
| ConstIterator | cend () const noexcept |
| Get const iterator to end (explicit const). | |
| bool | operator== (const OrderedHashMap &other) const noexcept |
| Compare two OrderedHashMaps for equality. | |
Hash map with Robin Hood hashing and insertion-order preservation.
| TKey | Key type (supports heterogeneous lookup for compatible types) |
| TValue | Value type |
| HashType | Hash type - uint32_t or uint64_t (default: uint32_t) |
| Seed | Hash seed value for initialization (default: FNV offset basis for HashType) |
| THasher | Hash functor type (default: hashing::Hasher<HashType, Seed>) |
| KeyEqual | Key equality comparator (default: std::equal_to<> for transparent comparison) |
Combines O(1) hash table lookups with stable insertion-order iteration. Uses Robin Hood hashing for the hash table and an intrusive doubly-linked list to maintain insertion order. Iteration follows insertion order, not bucket order.
Definition at line 78 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::const_iterator = ConstIterator |
Type alias for const iterator.
Definition at line 133 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::difference_type = std::ptrdiff_t |
Type alias for difference type.
Definition at line 127 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::hash_type = HashType |
Type alias for hash type (uint32_t or uint64_t).
Definition at line 121 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::hasher = THasher |
Type alias for hasher type.
Definition at line 115 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::iterator = Iterator |
Type alias for iterator.
Definition at line 130 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::key_equal = KeyEqual |
Type alias for key equality comparator.
Definition at line 118 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::key_type = TKey |
Type alias for key type.
Definition at line 106 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::mapped_type = TValue |
Type alias for mapped value type.
Definition at line 109 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::size_type = size_t |
Type alias for size type.
Definition at line 124 of file OrderedHashMap.h.
| using nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::value_type = std::pair<const TKey, TValue> |
Type alias for key-value pair type.
Definition at line 112 of file OrderedHashMap.h.
|
inline |
Construct map from initializer_list.
| init | Initializer list of key/value pairs |
|
inline |
Construct map from iterator range.
| InputIt | Input iterator type (must dereference to std::pair-like type) |
| first | Beginning of range to copy from |
| last | End of range (exclusive) |
|
inlineexplicit |
Constructor with specified initial capacity.
| initialCapacity | Minimum initial capacity (rounded up to power of 2) |
|
noexcept |
Move constructor.
| other | Map to move from |
| nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::OrderedHashMap | ( | const OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual > & | other | ) |
Copy constructor.
| other | Map to copy from (preserves insertion order) |
|
inline |
Checked element access with bounds checking.
| KeyType | Key type (supports heterogeneous lookup) |
| key | The key to access |
| std::out_of_range | if key is not found |
|
inline |
Checked const element access with bounds checking.
| KeyType | Key type (supports heterogeneous lookup) |
| key | The key to access |
| std::out_of_range | if key is not found |
|
inline |
Checked element access with bounds checking.
| key | The key to access |
| std::out_of_range | if key is not found |
|
inline |
Checked const element access with bounds checking.
| key | The key to access |
| std::out_of_range | if key is not found |
|
nodiscardnoexcept |
Get const iterator to first element in insertion order.
|
nodiscardnoexcept |
Get iterator to first element in insertion order.
|
inlinenodiscardnoexcept |
Get the current capacity of the hash table.
|
nodiscardnoexcept |
Get const iterator to first element in insertion order (explicit const).
|
nodiscardnoexcept |
Get const iterator to end (explicit const).
|
inlinenodiscardnoexcept |
Check if a key exists in the map.
| KeyType | Key type (supports heterogeneous lookup for compatible types) |
| key | The key to search for |
|
inline |
Emplace a value in-place for the given key.
| Args | Variadic template for value constructor arguments |
| key | The key to insert or update |
| args | Arguments forwarded to TValue constructor |
|
inline |
Emplace a value in-place for the given key (move key).
| Args | Variadic template for value constructor arguments |
| key | The key to insert or update (rvalue reference - moved) |
| args | Arguments forwarded to TValue constructor |
|
nodiscardnoexcept |
Get const iterator to end (past last element in insertion order).
|
nodiscardnoexcept |
Get iterator to end (past last element in insertion order).
|
inlinenoexcept |
Remove a key-value pair from the map.
| KeyType | Key type (supports heterogeneous lookup for compatible types) |
| key | The key to remove |
|
inlinenoexcept |
Erase range of elements.
| first | Beginning of range to erase (in insertion order) |
| last | End of range to erase (exclusive) |
|
inlinenoexcept |
Erase element at iterator position.
| pos | Iterator to element to erase |
|
inlinenodiscard |
Extract and remove a key-value pair from the map.
| KeyType | Key type (supports heterogeneous lookup for compatible types) |
| key | The key to extract |
Removes the key-value pair from the map and returns it. If the key is not found, returns std::nullopt. This operation invalidates iterators to the extracted element. The insertion order of remaining elements is preserved.
|
inlinenodiscardnoexcept |
Fast const lookup with heterogeneous key types (C++ idiom: pointer return).
| KeyType | Key type (supports heterogeneous lookup for compatible types) |
| key | The key to search for |
|
inlinenodiscardnoexcept |
Fast lookup with heterogeneous key types (C++ idiom: pointer return).
| KeyType | Key type (supports heterogeneous lookup for compatible types) |
| key | The key to search for |
|
inline |
Insert a key-value pair only if key doesn't exist (copy semantics).
| key | The key to insert |
| value | The value to associate with the key (copied) |
|
inline |
Insert a key-value pair only if key doesn't exist (move semantics).
| key | The key to insert |
| value | The value to associate with the key (moved) |
|
inline |
Insert a key-value pair only if key doesn't exist (perfect forwarding).
| key | The key to insert (moved) |
| value | The value to associate with the key (moved) |
|
inline |
Insert or update a key-value pair (copy semantics).
| key | The key to insert or update |
| value | The value to associate with the key (copied) |
|
inline |
Insert or update a key-value pair (move semantics).
| key | The key to insert or update |
| value | The value to associate with the key (moved) |
|
inline |
Insert or update a key-value pair (perfect forwarding for both key and value).
| key | The key to insert or update (forwarded) |
| value | The value to associate with the key (forwarded) |
|
inlinenodiscardnoexcept |
Check if the map is empty.
|
inline |
Merge elements from another map into this map (rvalue overload).
| other | Source map to merge from (modified - unique elements are moved out) |
|
inline |
Merge elements from another map into this map.
| other | Source map to merge from (modified - unique elements are moved out) |
Attempts to move each element from 'other' into this map in insertion order. Elements that already exist in this map (duplicates) remain in 'other'. After merge, 'other' contains only elements that were duplicates. Insertion order is preserved for both maps.
| OrderedHashMap & nfx::containers::OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual >::operator= | ( | const OrderedHashMap< TKey, TValue, HashType, Seed, THasher, KeyEqual > & | other | ) |
Copy assignment operator.
| other | Map to copy from (preserves insertion order) |
|
noexcept |
Move assignment operator.
| other | Map to move from |
|
nodiscardnoexcept |
Compare two OrderedHashMaps for equality.
| other | The other OrderedHashMap to compare with |
|
inline |
STL-compatible subscript operator (insert-if-missing).
| key | The key to access or insert |
If key doesn't exist, inserts default-constructed value at end of insertion order. Requires TValue to be default-constructible.
|
inline |
STL-compatible subscript operator with move semantics.
| key | The key to access or insert (moved if new) |
If key doesn't exist, inserts default-constructed value at end of insertion order. Requires TValue to be default-constructible.
|
inline |
Reserve capacity for at least the specified number of elements.
| minCapacity | Minimum capacity to reserve |
|
inlinenodiscardnoexcept |
Get the number of elements in the map.
|
inlinenoexcept |
Swap contents with another map.
| other | Map to swap with |
|
inline |
Try to emplace a value if key doesn't exist.
| Args | Variadic template for value constructor arguments |
| key | The key to insert (const reference) |
| args | Arguments forwarded to TValue constructor (only used if key doesn't exist) |
|
inline |
Try to emplace a value if key doesn't exist.
| Args | Variadic template for value constructor arguments |
| key | The key to insert (rvalue reference - moved only if inserted) |
| args | Arguments forwarded to TValue constructor (only used if key doesn't exist) |