-
首页
-
C4D R23.110 C++ SDK
ArrayMap< K, V, SORTED, COMPARE, ARRAY > Class Template Reference
Data Structures
#include <arraymap.h>
详细描述
template<typename K, typename V, Bool SORTED = true, typename COMPARE = DefaultCompare, typename ARRAY = BaseArraySelector<>>
class maxon::ArrayMap< K, V, SORTED, COMPARE, ARRAY >
An
ArrayMap
maps keys to values using an underlying array whose elements are key-value-pairs. It may be either sorted or unsorted. For very small maps, unsorted array maps are generally faster. For large maps (exceeding about 100 entries), you should consider using another implementation such as
HashMap
or
BurstTrieMap
because especially insertion and erasure become slow with array maps: For a sorted
ArrayMap
, those operations have a time cost of O(N), while searching has a time cost of O(log N).
Of all maps, the
ArrayMap
is the most efficient with respect to memory usage as it really only stores the key-value-pairs.
见
HashMap
for more examples on how to use maps in general.
-
Template Parameters
-
K
|
Type of keys.
|
V
|
Type of values.
|
SORTED
|
Use true for a sorted array.
|
COMPARE
|
Class
to be used to compare the keys.
|
ARRAY
|
An array selector template to choose the array implementation to use.
|
-
另请参阅
-
$ref maps
Public Types
|
using
|
IsArrayMap
= std::true_type
|
using
|
ArrayType
= typename
ArrayMapHelper
< K, V, SORTED, COMPARE, ARRAY >::
Array
|
using
|
Super
=
MapBase
<
ArrayMap
< K, V, SORTED, COMPARE, ARRAY >, K, V,
ArrayType
, COMPARE >
|
using
|
Entry
=
Pair
< K, V >
|
using
|
IteratorBase
=
AutoIterator
< const
ArrayType
>
|
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
=
ArrayMap
< K, V, true,
DefaultCompare
,
BaseArraySelector
<> >
|
using
|
Super
=
BaseCollection
<
ArrayMap
< K, V, true,
DefaultCompare
,
BaseArraySelector
<> >,
ArrayMapHelper
< K, V, true,
DefaultCompare
,
BaseArraySelector
<> >::
Array
>
|
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
|
|
ArrayMap
()
|
|
ArrayMap
(
ArrayMap
&&
src
)
|
|
MAXON_OPERATOR_MOVE_ASSIGNMENT
(
ArrayMap
)
|
template<typename MAP , typename CMP >
|
SFINAEHelper
<
Bool
, typename MAP::IsArrayMap, typename MAP::IsSorted, typename std::enable_if<
STD_IS_REPLACEMENT
(same, typename std::decay< CMP >::type,
DefaultCompare
)>::type >::type
|
IsEqualImpl
(const MAP &b, CMP &&cmp,
OverloadRank1
) const
|
Int
|
GetOperationCountForSearch
() const
|
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
())
|
template<typename KEYCOMPARE = COMPARE, typename KEY >
|
const V *
|
FindValue
(const KEY &key) const
|
template<typename KEYCOMPARE = COMPARE, typename KEY >
|
V *
|
FindValue
(const KEY &key)
|
Iterator
|
Find
(const K &key)
|
ConstIterator
|
Find
(const K &key) const
|
Iterator
|
FindFloor
(const K &key)
|
ConstIterator
|
FindFloor
(const K &key) const
|
Iterator
|
FindCeiling
(const K &key)
|
ConstIterator
|
FindCeiling
(const K &key) const
|
ResultOk
<
Bool
>
|
Erase
(const K &key)
|
template<template< Bool > class SUPER>
|
IteratorTemplate
< false, SUPER >
|
Erase
(const
IteratorTemplate
< false, SUPER > &position,
Int
eraseCnt=1)
|
const
ArrayType
&
|
GetUnderlyingArray
() const
|
ArrayType
&
|
GetUnderlyingArray
()
|
MAXON_ATTRIBUTE_FORCE_INLINE
|
MapBase
(ARGS &&... args)
|
MapImpl
<
ArrayMap
< K, V, true,
DefaultCompare
,
BaseArraySelector
<> > & >
|
ToMap
()
|
MapImpl
< const
ArrayMap
< K, V, true,
DefaultCompare
,
BaseArraySelector
<> > & >
|
ToMap
() const
|
MAXON_ATTRIBUTE_FORCE_INLINE
|
operator MapImpl< ArrayMap< K, V, true, DefaultCompare, BaseArraySelector<> > & >
()
|
MAXON_ATTRIBUTE_FORCE_INLINE
|
operator MapImpl< const ArrayMap< K, V, true, DefaultCompare, BaseArraySelector<> > & >
() 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 >
|
添加
(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
|
Member Typedef Documentation
◆
IsArrayMap
◆
ArrayType
◆
Super
◆
Entry
◆
IteratorBase
◆
Iterator
◆
ConstIterator
◆
KeyIterator
◆
ConstKeyIterator
◆
ValueIterator
◆
ConstValueIterator
构造函数 & 析构函数文档编制
◆
ArrayMap()
[1/2]
◆
ArrayMap()
[2/2]
成员函数文档编制
◆
GetEntry()
[1/2]
static const
Entry
* GetEntry
|
(
|
const V *
|
value
|
)
|
|
|
static
|
Returns the pointer to the entry to which #value belongs. You must not use this function if you cannot guarantee that value is a part of an entry.
-
参数
-
[in]
|
value
|
A pointer to a value which is known to belong to an entry.
|
-
返回
-
The entry of which #value is a part.
◆
GetEntry()
[2/2]
static
Entry
* GetEntry
|
(
|
typename std::remove_const< V >::type *
|
value
|
)
|
|
|
static
|
Returns the pointer to the entry to which #value belongs. You must not use this function if you cannot guarantee that value is a part of an entry.
-
参数
-
[in]
|
value
|
A pointer to a value which is known to belong to an entry.
|
-
返回
-
The entry of which #value is a part.
◆
Begin()
[1/2]
Returns an iterator pointing to the first entry of this map. For a sorted map, the iteration order corresponds to the order of the keys.
-
返回
-
Iterator for this map pointing to the first element.
◆
End()
[1/2]
Returns an iterator pointing just behind the last entry of this map. For a sorted map, the iteration order corresponds to the order of the keys.
-
返回
-
Iterator for this map pointing behind the last element.
◆
Begin()
[2/2]
Returns an iterator pointing to the first entry of this map. For a sorted map, the iteration order corresponds to the order of the keys.
-
返回
-
Iterator for this map pointing to the first element.
◆
End()
[2/2]
Returns an iterator pointing just behind the last entry of this map. For a sorted map, the iteration order corresponds to the order of the keys.
-
返回
-
Iterator for this map pointing behind the last element.
◆
GetKeys()
[1/2]
Returns a foreach iterator to iterate over all keys of this map. For a sorted map, this will yield all keys in ascending order.
-
返回
-
Foreach iterator over all keys.
◆
GetKeys()
[2/2]
Returns a foreach iterator to iterate over all keys of this map. For a sorted map, this will yield all keys in ascending order.
-
返回
-
Foreach iterator over all keys.
◆
GetValues()
[1/2]
Returns a foreach iterator to iterate over all values of this map. For a sorted map, this will yield all values in ascending order of the corresponding keys.
-
返回
-
Foreach iterator over all values.
◆
GetValues()
[2/2]
Returns a foreach iterator to iterate over all values of this map. For a sorted map, this will yield all values in ascending order of the corresponding keys.
-
返回
-
Foreach iterator over all values.
◆
MAXON_OPERATOR_MOVE_ASSIGNMENT()
MAXON_OPERATOR_MOVE_ASSIGNMENT
|
(
|
ArrayMap
< K, V, SORTED, COMPARE, ARRAY >
|
|
)
|
|
◆
IsEqualImpl()
◆
GetOperationCountForSearch()
Int
GetOperationCountForSearch
|
(
|
|
)
|
const
|
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.
-
返回
-
Estimate for the number of operations.
◆
InsertKey()
[1/2]
Finds the value associated with the given key, or creates a corresponding entry if it doesn't exist yet. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).
-
参数
-
[in]
|
key
|
Key of the value to find or create.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.
◆
InsertKey()
[2/2]
Finds the value associated with the given key, or creates a corresponding entry if it doesn't exist yet. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).
-
参数
-
[in]
|
key
|
Key of the value to find or create.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.
◆
InsertEntry()
[1/2]
Finds the entry with the given key, or creates such an entry if it doesn't exist yet, and returns an iterator pointing to the entry. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).
-
参数
-
[in]
|
key
|
Key of the entry to find or create.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.
◆
InsertEntry()
[2/2]
Finds the entry with the given key, or creates such an entry if it doesn't exist yet, and returns an iterator pointing to the entry. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).
-
参数
-
[in]
|
key
|
Key of the entry to find or create. If a new entry is created, its key will be constructed by move-semantics if possible.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.
◆
Insert()
[1/4]
Finds the entry with the given key, or creates such an entry if it doesn't exist yet, and returns an iterator pointing to the entry. The value of the entry will be set to
value
in any case.
-
参数
-
[in]
|
key
|
Key of the entry to find or create.
|
[in]
|
value
|
This will be copied to the value of the entry.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.
◆
Insert()
[2/4]
Finds the entry with the given key, or creates such an entry if it doesn't exist yet, and returns an iterator pointing to the entry. The value of the entry will be set to
value
in any case.
-
参数
-
[in]
|
key
|
Key of the entry to find or create. If a new entry is created, its key will be constructed by move-semantics if possible.
|
[in]
|
value
|
This will be copied to the value of the entry.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.
◆
Insert()
[3/4]
Finds the entry with the given key, or creates such an entry if it doesn't exist yet, and returns an iterator pointing to the entry. The value of the entry will be set to
value
in any case.
-
参数
-
[in]
|
key
|
Key of the entry to find or create.
|
[in]
|
value
|
This will be moved to the value of the entry.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.
◆
Insert()
[4/4]
Finds the entry with the given key, or creates such an entry if it doesn't exist yet, and returns an iterator pointing to the entry. The value of the entry will be set to
value
in any case.
-
参数
-
[in]
|
key
|
Key of the entry to find or create. If a new entry is created, its key will be constructed by move-semantics if possible.
|
[in]
|
value
|
This will be moved to the value of the entry.
|
[out]
|
created
|
This will be set to true if a new entry has been created successfully, otherwise it will be set to false.
|
-
返回
-
Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.
◆
FindValue()
[1/2]
const V* FindValue
|
(
|
const KEY &
|
key
|
)
|
const
|
Finds the value associated with the given key in this map.
-
参数
-
[in]
|
key
|
Key to search for.
|
-
返回
-
Pointer to value for the given key, or nullptr if no entry exists for the key.
◆
FindValue()
[2/2]
V* FindValue
|
(
|
const KEY &
|
key
|
)
|
|
Finds the value associated with the given key in this map.
-
参数
-
[in]
|
key
|
Key to search for.
|
-
返回
-
Pointer to value for the given key, or nullptr if no entry exists for the key.
◆
Find()
[1/2]
Finds the entry for the given key in this map.
-
参数
-
[in]
|
key
|
Key to search for.
|
-
返回
-
Iterator pointing to the entry with the given
key
, or an invalid iterator if this doesn't exist.
◆
Find()
[2/2]
Finds the entry for the given key in this map.
-
参数
-
[in]
|
key
|
Key to search for.
|
-
返回
-
Iterator pointing to the entry with the given
key
, or an invalid iterator if this doesn't exist.
◆
FindFloor()
[1/2]
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.
|
-
返回
-
Iterator pointing to the entry with greatest key less than or equal to the given
key
, or an invalid iterator if this doesn't exist.
◆
FindFloor()
[2/2]
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.
|
-
返回
-
Iterator pointing to the entry with greatest key less than or equal to the given
key
, or an invalid iterator if this doesn't exist.
◆
FindCeiling()
[1/2]
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.
|
-
返回
-
Iterator pointing to the entry with smallest key greater than or equal to the given
key
, or an invalid iterator if this doesn't exist.
◆
FindCeiling()
[2/2]
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.
|
-
返回
-
Iterator pointing to the entry with smallest key greater than or equal to the given
key
, or an invalid iterator if this doesn't exist.
◆
Erase()
[1/2]
Removes an entry with the given key from this map (if possible).
-
参数
-
[in]
|
key
|
Key of the map entry to be be removed.
|
-
返回
-
True if an entry was found and removed for #key, otherwise false.
◆
Erase()
[2/2]
Removes
eraseCnt
elements from this map starting at the position given by
position
. The returned iterator will point to the element behind the last removed element.
-
参数
-
[in]
|
position
|
Iterator pointing to the first element to be removed.
|
[in]
|
eraseCnt
|
Number of elements to remove.
|
-
返回
-
Iterator pointing to the element behind the last removed element.
◆
GetUnderlyingArray()
[1/2]
const
ArrayType
& GetUnderlyingArray
|
(
|
|
)
|
const
|
◆
GetUnderlyingArray()
[2/2]