CRBMap 类
此类表示映射结构,使用红黑二叉树。
语法
template <typename K,
typename V,
class KTraits = CElementTraits<K>,
class VTraits = CElementTraits<V>>
class CRBMap : public CRBTree<K, V, KTraits, VTraits>
参数
K
键元素类型。
V
值元素类型。
KTraits
用于复制或移动键元素的代码。 有关更多详细信息,请参阅 CElementTraits 类。
VTraits
用于复制或移动值元素的代码。
成员
公共构造函数
名称 | 描述 |
---|---|
CRBMap::CRBMap | 构造函数。 |
CRBMap::~CRBMap | 析构函数。 |
公共方法
名称 | 描述 |
---|---|
CRBMap::Lookup | 调用此方法可查找 CRBMap 对象中的键或值。 |
CRBMap::RemoveKey | 调用此方法可在给定键的情况下从 CRBMap 对象中删除元素。 |
CRBMap::SetAt | 调用此方法可将元素对插入映射中。 |
备注
CRBMap
支持任何给定类型的映射数组,可管理有序的键元素数组及其关联值。 每个键只能有一个关联值。 元素(由键和值组成)使用 CRBMap::SetAt 方法存储在二叉树结构中。 可以使用 CRBMap::RemoveKey 方法删除元素,该方法可删除具有给定键值的元素。
使用 CRBTree::GetHeadPosition、CRBTree::GetNext 和 CRBTree::GetNextValue 等方法可以遍历树。
KTraits 和 VTraits 参数是包含复制或移动元素所需的任何补充代码的特征类。
CRBMap
派生自 CRBTree,后者使用红黑算法实现二叉树。 CRBMultiMap 是一种变体,它允许每个键有多个值。 它也源自 CRBTree
,因此很多特征与 CRBMap
相同。
CAtlMap 类提供了 CRBMap
和 CRBMultiMap
这两者的替代方法。 只需要存储少量元素时,请考虑改用 CSimpleMap 类。
有关各种集合类及其特性和性能特征的更完整讨论,请参阅 ATL 集合类。
继承层次结构
CRBMap
要求
标头:atlcoll.h
CRBMap::CRBMap
构造函数。
explicit CRBMap(size_t nBlockSize = 10) throw();
参数
nBlockSize
块大小。
注解
nBlockSize 参数用于衡量在需要新元素时分配的内存量。 较大的块大小可减少对内存分配例程的调用,但会使用更多资源。 默认情况下一次为 10 个元素分配空间。
有关其他可用方法的信息,请参阅基类 CRBTree 的文档。
示例
// Define a map object which has an
// integer key, a double value, and a
// block size of 5
CRBMap<int, double> myMap(5);
CRBMap::~CRBMap
析构函数。
~CRBMap() throw();
备注
释放任何已分配的资源。
有关其他可用方法的信息,请参阅基类 CRBTree 的文档。
CRBMap::Lookup
调用此方法可查找 CRBMap
对象中的键或值。
bool Lookup(KINARGTYPE key, VOUTARGTYPE value) const throw(...);
const CPair* Lookup(KINARGTYPE key) const throw();
CPair* Lookup(KINARGTYPE key) throw();
参数
键
指定要查找的元素的键。
value
接收查找值的变量。
返回值
如果找到键,则该方法的第一种形式返回 true,否则为 false。 第二种和第三种形式返回一个指向 CPair 的指针。
备注
有关其他可用方法的信息,请参阅基类 CRBTree 的文档。
示例
// Look up the value for a key of 0
double v;
myMap.Lookup(0,v);
CRBMap::RemoveKey
调用此方法可在给定键的情况下从 CRBMap
对象中删除元素。
bool RemoveKey(KINARGTYPE key) throw();
参数
键
与要删除的元素对相对应的键。
返回值
如果找到并删除密钥,则返回 true,失败时返回 false。
注解
有关其他可用方法的信息,请参阅基类 CRBTree 的文档。
示例
// Remove an element, based on the key of 0
ATLVERIFY(myMap.RemoveKey(0) == true);
CRBMap::SetAt
调用此方法可将元素对插入映射中。
POSITION SetAt(
KINARGTYPE key,
VINARGTYPE value) throw(...);
参数
键
要添加到 CRBMap
对象的键值。
value
要添加到 CRBMap
的对象值。
返回值
返回 CRBMap
对象中键/值元素对的位置。
注解
如果找到匹配的键,则 SetAt
替换现有元素。 如果未找到密钥,则会创建一个新的键/值对。
有关其他可用方法的信息,请参阅基类 CRBTree 的文档。
示例
// Add an element to the map, with a key of 0
myMap.SetAt(0,1.1);