|
SpECTRE
v2025.08.19
|
A hash table with a compile-time specified maximum size and ability to efficiently handle perfect hashes. More...
#include <FixedHashMap.hpp>
Public Types | |
| using | key_type = Key |
| using | mapped_type = ValueType |
| using | value_type = std::pair< const key_type, mapped_type > |
| using | size_type = size_t |
| using | difference_type = ptrdiff_t |
| using | hasher = Hash |
| using | key_equal = KeyEqual |
| using | reference = value_type & |
| using | const_reference = const value_type & |
| using | pointer = value_type * |
| using | const_pointer = const value_type * |
| using | iterator = FixedHashMapIterator< MaxSize, key_type, value_type, hasher, key_equal > |
| using | const_iterator = FixedHashMapIterator< MaxSize, key_type, const value_type, hasher, key_equal > |
Public Member Functions | |
| FixedHashMap (std::initializer_list< value_type > init) | |
| FixedHashMap (const FixedHashMap &)=default | |
| FixedHashMap & | operator= (const FixedHashMap &other) |
| FixedHashMap (FixedHashMap &&)=default | |
| FixedHashMap & | operator= (FixedHashMap &&other) |
| iterator | begin () |
| const_iterator | begin () const |
| const_iterator | cbegin () const |
| iterator | end () |
| const_iterator | end () const |
| const_iterator | cend () const |
| bool | empty () const |
| size_t | size () const |
| void | clear () |
| iterator | erase (const const_iterator &pos) |
| size_t | erase (const key_type &key) |
| mapped_type & | at (const key_type &key) |
| const mapped_type & | at (const key_type &key) const |
| mapped_type & | operator[] (const key_type &key) |
| size_t | count (const key_type &key) const |
| iterator | find (const key_type &key) |
| const_iterator | find (const key_type &key) const |
| bool | contains (const key_type &key) const |
Check if key is in the map. | |
| key_equal | key_eq () const |
| Get key equal function object. | |
| hasher | hash_function () const |
| Get hash function object. | |
| void | pup (PUP::er &p) |
| template<bool Assign, class M > | |
| auto | insert_or_assign_impl (key_type &&key, M &&obj) -> std::pair< iterator, bool > |
| template<bool IsInserting> | |
| auto | get_data_entry (const Key &key) -> typename storage_type::iterator |
| std::pair< iterator, bool > | insert (const value_type &value) |
| Inserts the element if it does not exists. | |
| std::pair< iterator, bool > | insert (value_type &&value) |
| Inserts the element if it does not exists. | |
| template<typename... Args> | |
| std::pair< iterator, bool > | emplace (Args &&... args) |
| Inserts the element if it does not exists. | |
| template<class M > | |
| std::pair< iterator, bool > | insert_or_assign (const key_type &key, M &&obj) |
| Inserts the element if it does not exists, otherwise assigns to it the new value. | |
| template<class M > | |
| std::pair< iterator, bool > | insert_or_assign (key_type &&key, M &&obj) |
| Inserts the element if it does not exists, otherwise assigns to it the new value. | |
Friends | |
| template<size_t FMaxSize, class FKey , class FValueType , class FHash , class FKeyEqual > | |
| bool | operator== (const FixedHashMap< FMaxSize, FKey, FValueType, FHash, FKeyEqual > &a, const FixedHashMap< FMaxSize, FKey, FValueType, FHash, FKeyEqual > &b) |
A hash table with a compile-time specified maximum size and ability to efficiently handle perfect hashes.
There are a few requirements on the types passed to FixedHashMap. These are:
Key is CopyConstructible for copy and move semantics, as well as serializationValueType is MoveConstructibleHash is a perfect hash for some values of MaxSize then in order to use the perfect hashing improvements Hash must have a member variable template is_perfect that takes as its only template parameter a size_t equal to MaxSize. A perfect hash must map each Key to [0, MaxSize) uniquely.The interface is similar to std::unordered_map, so see the documentation for that for details.
Hash is assumed to be a perfect hash for MaxSize if Hash::template is_perfect<MaxSize> is true.