template<typename K, typename V, typename SMALL, typename LARGE, Int THRESHOLD, Int REVERSE_THRESHOLD>
class maxon::HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >
A HybridMap allows to take advantage of two different map implementations. For example, in a typical setting an ArrayMap may perform better with a low number of entries, while a BurstTrieMap gets better when the number of entries increases. If you cannot predict that the number of entries will always be small (to use an ArrayMap) or large (to use a BurstTrieMap), you can use the HybridMap which automatically switches between two implementations based on the number of entries:
See HashMap for more examples on how to use maps in general.
- Template Parameters
-
K | Type of keys. |
V | Type of values. |
SMALL | A map selector template to choose the map implementation to use for a small number of entries. |
LARGE | A map selector template to choose the map implementation to use for a large number of entries. |
THRESHOLD | When the number of entries reaches THRESHOLD, HybridMap switches to the LARGE implementation. |
REVERSE_THRESHOLD | When the number of entries falls below REVERSE_THRESHOLD, HybridMap switches back to the SMALL implementation. If this is negative, this will never happen. |
- See also
- $ref maps
|
using | SmallType = typename SMALL::template Type< K, V > |
|
using | LargeType = typename LARGE::template Type< K, V > |
|
using | IsHybridMap = std::true_type |
|
using | Iterator = IteratorTemplate< false, EntryIteratorBase > |
|
using | ConstIterator = IteratorTemplate< true, EntryIteratorBase > |
|
using | KeyIterator = IteratorTemplate< false, KeyIteratorBase > |
|
using | ConstKeyIterator = IteratorTemplate< true, KeyIteratorBase > |
|
using | ValueIterator = IteratorTemplate< false, ValueIteratorBase > |
|
using | ConstValueIterator = IteratorTemplate< true, ValueIteratorBase > |
|
using | MapType = HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > |
|
using | Super = BaseCollection< HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >, EmptyClass > |
|
using | KeyType = K |
|
using | ValueType = V |
|
using | IsCollection = std::true_type |
|
|
Iterator | Begin () |
|
Iterator | End () |
|
ConstIterator | Begin () const |
|
ConstIterator | End () const |
|
KeyIterator | GetKeys () |
|
ConstKeyIterator | GetKeys () const |
|
ValueIterator | GetValues () |
|
ConstValueIterator | GetValues () const |
|
| HybridMap () |
|
| ~HybridMap () |
|
| HybridMap (HybridMap &&src) |
|
| MAXON_OPERATOR_MOVE_ASSIGNMENT (HybridMap) |
|
template<typename MAP > |
Result< void > | CopyFromImpl (MAP &&src, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0) |
|
template<typename MAP > |
SFINAEHelper< Result< void >, typename std::remove_reference< MAP >::type::IsHybridMap >::type | CopyFromImpl (MAP &&src, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank1) |
|
void | Flush () |
|
void | Reset () |
|
Int | GetCount () const |
|
Int | GetOperationCountForSearch () const |
|
Int | GetMemorySize () const |
|
ResultMem | SetCapacityHint (Int capacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
ResultRef< V > | InsertKey (const K &key, Bool &created=BoolLValue()) |
|
ResultRef< V > | InsertKey (K &&key, Bool &created=BoolLValue()) |
|
ResultMemT< Iterator > | InsertEntry (const K &key, Bool &created=BoolLValue()) |
|
ResultMemT< Iterator > | InsertEntry (K &&key, Bool &created=BoolLValue()) |
|
ResultMemT< Iterator > | Insert (const K &key, const V &value, Bool &created=BoolLValue()) |
|
ResultMemT< Iterator > | Insert (K &&key, const V &value, Bool &created=BoolLValue()) |
|
ResultMemT< Iterator > | Insert (const K &key, V &&value, Bool &created=BoolLValue()) |
|
ResultMemT< Iterator > | Insert (K &&key, V &&value, Bool &created=BoolLValue()) |
|
const V * | FindValue (const K &key) const |
|
V * | FindValue (const K &key) |
|
Iterator | Find (const K &key) |
|
ConstIterator | Find (const K &key) const |
|
Iterator | FindFloor (const K &key) |
|
ConstIterator | FindFloor (const K &key) const |
|
Result< Bool > | Erase (const K &key) |
|
template<template< Bool > class SUPER> |
IteratorTemplate< false, SUPER > | Erase (const IteratorTemplate< false, SUPER > &position) |
|
Result< void > | UseLargeMap () |
|
Result< void > | UseSmallMap () |
|
MAXON_ATTRIBUTE_FORCE_INLINE | MapBase (ARGS &&... args) |
|
MapImpl< HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > | ToMap () |
|
MapImpl< const HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > | ToMap () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE | operator MapImpl< HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > () |
|
MAXON_ATTRIBUTE_FORCE_INLINE | operator MapImpl< const HybridMap< K, V, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE | MapBase0 (ARGS &&... args) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | Contains (typename ByValueParam< K >::type key) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE SFINAEHelper< Bool, typename PAIR::KeyType >::type | Contains (const PAIR &pair) const |
|
ResultRef< V > | Append (const K &key) |
|
SFINAEHelper< ResultRef< V >, typename PAIR::KeyType >::type | Append (const PAIR &pair) |
|
Result< void > | Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
Result< void > | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
Result< void > | AppendAllInverse (COLLECTION2 &&other) |
|
Bool | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const |
|
Result< void > | SubtractImpl (COLLECTION2 &&other, OverloadRank0) |
|
Bool | IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const |
|
HashInt | GetHashCode () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE | BaseCollection (ARGS &&... args) |
|
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator== (const COLLECTION2 &other) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator!= (const COLLECTION2 &other) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!STD_IS_REPLACEMENT(same, typename std::decay< COMPARE >::type, EQUALITY), Bool >::type | IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Subtract (COLLECTION2 &&other) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Intersect (const COLLECTION2 &other) |
|
Bool | Intersects (const COLLECTION2 &other) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0) |
|
Result< void > | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) |
|
Result< void > | IntersectImpl (COLLECTION2 &&other, OverloadRank0) |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | IsEmpty () const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | IsPopulated () const |
|
String | ToString (const FormatStatement *formatStatement=nullptr) const |
|
MAXON_ATTRIBUTE_FORCE_INLINE Bool | ContainsAll (COLLECTION2 &&other) const |
|
Bool | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const |
|