#include <arraymap.h>
An ArraySet is an implementation of a set using an underlying array. An element is in the set if it is in the array. ArraySet is based on ArrayMap and takes care of not inserting an element twice in the array. Like ArrayMap, ArraySet may be either sorted or unsorted. For very small sets, unsorted array sets are generally faster. For large sets (exceeding about 100 entries), you should consider using another implementation such as HashSet or BurstTrieSet because especially insertion and erasure become slow with array sets: For a sorted ArraySet, those operations have a time cost of O(N), while searching has a time cost of O(log N).
Of all sets, the ArraySet is the most efficient with respect to memory usage as it really only stores the contained values.
See HashSet for more examples on how to use sets in general.
T | Type of elements of the set. |
SORTED | Use true for a sorted array. |
COMPARE | Class to be used to compare the values. |
ARRAY | An array selector template to choose the array implementation to use. |
Public Types | |
using | MapType = ArrayMap< T, UnitType, SORTED, COMPARE, ARRAY > |
using | IsArrayMap = std::true_type |
using | IsArraySet = std::true_type |
using | Iterator = typename Super::KeyIterator |
using | ConstIterator = typename Super::ConstKeyIterator |
![]() | |
using | SetType = COLLECTION |
![]() | |
using | Super = BaseCollection< COLLECTION, SUPER > |
using | ValueType = VALUETYPE |
![]() | |
using | IsCollection = std::true_type |
using | IsBaseArray = std::false_type |
Public Member Functions | |
ArraySet () | |
ArraySet (ArraySet &&src) | |
MAXON_OPERATOR_MOVE_ASSIGNMENT (ArraySet) | |
MapType & | GetMap () |
const MapType & | GetMap () const |
Bool | Contains (typename ByValueParam< T >::type value) const |
ResultMemT< Iterator > | Insert (const T &value, Bool &added=BoolLValue()) |
ResultMemT< Iterator > | Insert (T &&value, Bool &added=BoolLValue()) |
ResultRef< const T > | InsertKey (const T &value, Bool &added=BoolLValue()) |
ResultRef< const T > | InsertKey (T &&value, Bool &added=BoolLValue()) |
ResultOk< Bool > | Erase (const T &value) |
ConstIterator | Begin () const |
ConstIterator | End () const |
Iterator | Begin () |
Iterator | End () |
Iterator | Erase (const Iterator &it) |
const ARRAY::template Type< T > & | GetUnderlyingArray () const |
ARRAY::template Type< T > & | GetUnderlyingArray () |
template<typename KEYCOMPARE = COMPARE, typename KEY = K> | |
Iterator | Find (const KEY &key) |
template<typename KEYCOMPARE = COMPARE, typename KEY = K> | |
ConstIterator | Find (const KEY &key) const |
template<typename KEYCOMPARE = COMPARE, typename KEY = K> | |
Iterator | FindFloor (const KEY &key) |
template<typename KEYCOMPARE = COMPARE, typename KEY = K> | |
ConstIterator | FindFloor (const KEY &key) const |
template<typename KEYCOMPARE = COMPARE, typename KEY = K> | |
Iterator | FindCeiling (const KEY &key) |
template<typename KEYCOMPARE = COMPARE, typename KEY = K> | |
ConstIterator | FindCeiling (const KEY &key) const |
Int | GetOperationCountForSearch () const |
![]() | |
MAXON_ATTRIBUTE_FORCE_INLINE | SetBase (ARGS &&... args) |
SetImpl< ArraySet< T, true, DefaultCompare, BaseArraySelector<> > & > | ToSet () |
SetImpl< const ArraySet< T, true, DefaultCompare, BaseArraySelector<> > & > | ToSet () const |
MAXON_ATTRIBUTE_FORCE_INLINE | operator SetImpl< ArraySet< T, true, DefaultCompare, BaseArraySelector<> > & > () |
MAXON_ATTRIBUTE_FORCE_INLINE | operator SetImpl< const ArraySet< T, true, DefaultCompare, BaseArraySelector<> > & > () const |
![]() | |
template<typename... ARGS> | |
MAXON_ATTRIBUTE_FORCE_INLINE | SetBase0 (ARGS &&... args) |
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< const VALUETYPE > | Append (typename ByValueParam< VALUETYPE >::type v) |
template<typename COLLECTION2 > | |
Bool | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE) |
template<typename COLLECTION2 > | |
Result< void > | SubtractImpl (COLLECTION2 &&other, OverloadRank0) |
template<typename COLLECTION2 , typename COMPARE > | |
Bool | IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const |
HashInt | GetHashCode () const |
UniqueHash | GetUniqueHashCode () const |
![]() | |
template<typename... ARGS> | |
MAXON_ATTRIBUTE_FORCE_INLINE | Collection (ARGS &&... args) |
ResultOk< void > | VariadicAppend () |
template<typename V , typename... VALUES> | |
Result< void > | VariadicAppend (V &&value, VALUES &&... rest) |
operator ValueReceiver< const VALUETYPE & > () | |
operator ValueReceiver< VALUETYPE && > () | |
operator ValueReceiver< typename std::conditional< STD_IS_REPLACEMENT (scalar, VALUETYPE) | |
DummyParamType & | type () |
template<typename FN > | |
Result< Bool > | ForEach (FN &&callback) const |
template<typename FN > | |
Result< Bool > | ForEach (FN &&callback) |
template<typename H = COLLECTION> | |
H::Iterator | Find (typename ByValueParam< VALUETYPE >::type v) |
template<typename H = COLLECTION> | |
H::ConstIterator | Find (typename ByValueParam< VALUETYPE >::type v) const |
Int | FindIndex (typename ByValueParam< VALUETYPE >::type v) const |
MAXON_ATTRIBUTE_FORCE_INLINE Bool | Contains (typename ByValueParam< VALUETYPE >::type v) const |
![]() | |
template<typename... ARGS> | |
MAXON_ATTRIBUTE_FORCE_INLINE | BaseCollection (ARGS &&... args) |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator== (const COLLECTION2 &other) const |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type | operator!= (const COLLECTION2 &other) const |
template<typename COMPARE = EqualityCompare, typename COLLECTION2 > | |
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 |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY) |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE) |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Subtract (COLLECTION2 &&other) |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | Intersect (const COLLECTION2 &other) |
template<typename COLLECTION2 > | |
Bool | Intersects (const COLLECTION2 &other) const |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > | CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0) |
template<typename COLLECTION2 > | |
Result< void > | AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0) |
template<typename COLLECTION2 > | |
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 |
template<typename COLLECTION2 > | |
MAXON_ATTRIBUTE_FORCE_INLINE Bool | ContainsAll (COLLECTION2 &&other) const |
template<typename COLLECTION2 > | |
Bool | ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const |
Private Types | |
using | Super = SetBase< ArraySet< T, SORTED, COMPARE, ARRAY >, T, Protected< MapType >, COMPARE > |
Private Member Functions | |
MAXON_DISALLOW_COPY_AND_ASSIGN (ArraySet) | |
Additional Inherited Members | |
![]() | |
static const VALUETYPE & | GetMapKey (const VALUETYPE &key) |
![]() | |
VALUETYPE | |
![]() | |
static const COLLECTION_KIND | KIND |
using IsArrayMap = std::true_type |
using IsArraySet = std::true_type |
using Iterator = typename Super::KeyIterator |
using ConstIterator = typename Super::ConstKeyIterator |
ArraySet | ( | ) |
|
private |
MAXON_OPERATOR_MOVE_ASSIGNMENT | ( | ArraySet< T, SORTED, COMPARE, ARRAY > | ) |
MapType& GetMap | ( | ) |
const MapType& GetMap | ( | ) | const |
Bool Contains | ( | typename ByValueParam< T >::type | value | ) | const |
Checks if this set contains value
.
[in] | value | The value to check. |
value
. ResultMemT<Iterator> Insert | ( | const T & | value, |
Bool & | added = BoolLValue() |
||
) |
Adds value
to this set. If value
is already contained in this set, nothing happens, and added
is set to false
.
[in] | value | Value to add to this set. |
[out] | added | This will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false. |
ResultMemT<Iterator> Insert | ( | T && | value, |
Bool & | added = BoolLValue() |
||
) |
Adds value
to this set. If value
is already contained in this set, nothing happens, and added
is set to false
.
[in] | value | Value to add to this set. When a new element has to be added, value will be moved into the new element. |
[out] | added | This will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false. |
ResultRef<const T> InsertKey | ( | const T & | value, |
Bool & | added = BoolLValue() |
||
) |
Adds value
to this set. If value
is already contained in this set, nothing happens, and added
is set to false
.
[in] | value | Value to add to this set. |
[out] | added | This will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false. |
ResultRef<const T> InsertKey | ( | T && | value, |
Bool & | added = BoolLValue() |
||
) |
Adds value
to this set. If value
is already contained in this set, nothing happens, and added
is set to false
.
[in] | value | Value to add to this set. When a new element has to be added, value will be moved into the new element. |
[out] | added | This will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false. |
Remove value
from this set. If value
isn't contained in this set, nothing happens.
[in] | value | Value to remove from this set. |
ConstIterator Begin | ( | ) | const |
ConstIterator End | ( | ) | const |
Iterator Begin | ( | ) |
Iterator End | ( | ) |
const ARRAY::template Type<T>& GetUnderlyingArray | ( | ) | const |
ARRAY::template Type<T>& GetUnderlyingArray | ( | ) |
Iterator Find | ( | typename KEYCOMPARE | = COMPARE , |
typename KEY | = K |
||
) |
Finds the entry for the given key in this map.
[in] | key | Key to search for. |
key
, or an invalid iterator if this doesn't exist. ConstIterator Find | ( | typename KEYCOMPARE | = COMPARE , |
typename KEY | = K |
||
) |
Finds the entry for the given key in this map.
[in] | key | Key to search for. |
key
, or an invalid iterator if this doesn't exist. Iterator FindFloor | ( | typename KEYCOMPARE | = COMPARE , |
typename KEY | = K |
||
) |
Finds the entry with the greatest key less than or equal to the given key
. If no such entry exists, the returned iterator will be invalid (its operator Bool
will return false). This function is only supported by sorted array maps.
[in] | key | Key to search for. |
key
, or an invalid iterator if this doesn't exist. ConstIterator FindFloor | ( | typename KEYCOMPARE | = COMPARE , |
typename KEY | = K |
||
) |
Finds the entry with the greatest key less than or equal to the given key
. If no such entry exists, the returned iterator will be invalid (its operator Bool
will return false). This function is only supported by sorted array maps.
[in] | key | Key to search for. |
key
, or an invalid iterator if this doesn't exist. Iterator FindCeiling | ( | typename KEYCOMPARE | = COMPARE , |
typename KEY | = K |
||
) |
Finds the entry with the smallest key greater than or equal to the given key
. If no such entry exists, the returned iterator will be invalid (its operator Bool
will return false). This function is only supported by sorted array maps.
[in] | key | Key to search for. |
key
, or an invalid iterator if this doesn't exist. ConstIterator FindCeiling | ( | typename KEYCOMPARE | = COMPARE , |
typename KEY | = K |
||
) |
Finds the entry with the smallest key greater than or equal to the given key
. If no such entry exists, the returned iterator will be invalid (its operator Bool
will return false). This function is only supported by sorted array maps.
[in] | key | Key to search for. |
key
, or an invalid iterator if this doesn't exist. Int GetOperationCountForSearch |
Returns an estimate of the number of operations needed to locate a given key in this map. This is used when two collections are compared: The iteration goes over the collection which would require more operations for search, and each entry is searched in the other collection.