CRBMultiMap 类

此类表示一种映射结构,它允许每个键可以与多个值相关联,使用红黑二叉树。

语法

template<typename K,
         typename V,
         class KTraits = CElementTraits<K>,
         class VTraits = CElementTraits<V>>
class CRBMultiMap : public CRBTree<K, V, KTraits, VTraits>

参数

K
键元素类型。

V
值元素类型。

KTraits
用于复制或移动键元素的代码。 有关更多详细信息,请参阅 CElementTraits 类

VTraits
用于复制或移动值元素的代码。

成员

公共构造函数

名称 描述
CRBMultiMap::CRBMultiMap 构造函数。
CRBMultiMap::~CRBMultiMap 析构函数。

公共方法

名称 描述
CRBMultiMap::FindFirstWithKey 调用此方法以查找具有给定键的第一个元素的位置。
CRBMultiMap::GetNextValueWithKey 调用此方法以获取与给定键关联的值,并更新位置值。
CRBMultiMap::GetNextWithKey 调用此方法以获取与给定键关联的元素,并更新位置值。
CRBMultiMap::Insert 调用此方法可将元素对插入映射中。
CRBMultiMap::RemoveKey 调用此方法以删除给定键的所有键/值元素。

注解

CRBMultiMap 支持任何给定类型的映射数组,可管理有序的键元素数组和值。 与 CRBMap 类不同,每个键可以与多个值相关联。

元素(由键和值组成)使用 CRBMultiMap::Insert 方法存储在二叉树结构中。 可以使用 CRBMultiMap::RemoveKey 方法删除元素,该方法删除与给定键匹配的所有元素。

使用 CRBTree::GetHeadPositionCRBTree::GetNextCRBTree::GetNextValue 等方法可以遍历树。 使用 CRBMultiMap::FindFirstWithKeyCRBMultiMap::GetNextValueWithKeyCRBMultiMap::GetNextWithKey 方法可以访问每个键可能存在的多个值。 请参阅 CRBMultiMap::CRBMultiMap 的示例以在实践中对此进行说明。

KTraits 和 VTraits 参数是包含复制或移动元素所需的任何补充代码的特征类。

CRBMultiMap 派生自 CRBTree,后者使用红黑算法实现二叉树。 CAtlMap 类提供了 CRBMultiMapCRBMap 这两者的替代方法。 只需要存储少量元素时,请考虑改用 CSimpleMap 类。

有关各种集合类及其特性和性能特征的更完整讨论,请参阅 ATL 集合类

继承层次结构

CRBTree

CRBMultiMap

要求

标头:atlcoll.h

CRBMultiMap::CRBMultiMap

构造函数。

explicit CRBMultiMap(size_t nBlockSize = 10) throw();

参数

nBlockSize
块大小。

注解

nBlockSize 参数用于衡量在需要新元素时分配的内存量。 较大的块大小可减少对内存分配例程的调用,但会使用更多资源。 默认情况下一次为 10 个元素分配空间。

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

示例

// Define a multimap object which has an integer
// key, a double value, and a block size of 5
CRBMultiMap<int, double> myMap(5);

// Add some key/values. Notice how three
// different values are associated with 
// one key. In a CRBMap object, the values
// would simply overwrite each other.
myMap.Insert(0, 1.1);
myMap.Insert(0, 1.2);
myMap.Insert(0, 1.3);
myMap.Insert(1, 2.1);

// Look up a key and iterate through
// all associated values

double v;
POSITION myPos = myMap.FindFirstWithKey(0);

while (myPos != NULL)
{
   v = myMap.GetNextValueWithKey(myPos,0);
   // As the loop iterates, v 
   // contains the values 1.3, 1.2, 1.1
}

// Remove all of the values associated with that key
size_t i = myMap.RemoveKey(0);

// Confirm all three values were deleted
ATLASSERT(i == 3);

CRBMultiMap::~CRBMultiMap

析构函数。

~CRBMultiMap() throw();

备注

释放任何已分配的资源。

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

CRBMultiMap::FindFirstWithKey

调用此方法以查找具有给定键的第一个元素的位置。

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

参数


指定标识要查找的元素的键。

返回值

如果找到键,则返回第一个键/值元素的位置,否则返回 NULL。

备注

CRBMultiMap 中的键可以具有一个或多个关联值。 此方法将提供与该特定键关联的第一个值(实际上可能是唯一值)的位置值。 然后可以将返回的位置值与 CRBMultiMap::GetNextValueWithKeyCRBMultiMap::GetNextWithKey 一起使用以获取值并更新位置。

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

示例

请参阅 CRBMultiMap::CRBMultiMap 的示例。

CRBMultiMap::GetNextValueWithKey

调用此方法以获取与给定键关联的值,并更新位置值。

const V& GetNextValueWithKey(
    POSITION& pos,
    KINARGTYPE key) const throw();
V& GetNextValueWithKey(
    POSITION& pos,
    KINARGTYPE key) throw();

参数

pos
位置值,获取方式是调用 CRBMultiMap::FindFirstWithKeyCRBMultiMap::GetNextWithKey 或之前对 GetNextValueWithKey 的调用。


指定标识要查找的元素的键。

返回值

返回与给定键关联的元素对。

备注

位置值将进行更新以指向与键关联的下一个值。 如果不存在更多值,则将位置值设置为 NULL。

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

示例

请参阅 CRBMultiMap::CRBMultiMap 的示例。

CRBMultiMap::GetNextWithKey

调用此方法以获取与给定键关联的元素,并更新位置值。

const CPair* GetNextWithKey(
    POSITION& pos,
    KINARGTYPE key) const throw();
CPair* GetNextWithKey(
    POSITION& pos,
    KINARGTYPE key) throw();

参数

pos
位置值,获取方式是调用 CRBMultiMap::FindFirstWithKeyCRBMultiMap::GetNextValueWithKey 或之前对 GetNextWithKey 的调用。


指定标识要查找的元素的键。

返回值

返回与给定键关联的下一个 CRBTree::CPair 类元素。

注解

位置值将进行更新以指向与键关联的下一个值。 如果不存在更多值,则将位置值设置为 NULL。

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

CRBMultiMap::Insert

调用此方法可将元素对插入映射中。

POSITION Insert(KINARGTYPE key, VINARGTYPE value) throw(...);

参数


要添加到 CRBMultiMap 对象的键值。

value
要添加到 CRBMultiMap 对象的值,与 key 关联。

返回值

返回 CRBMultiMap 对象中键/值元素对的位置。

备注

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

示例

请参阅 CRBMultiMap::CRBMultiMap 的示例。

CRBMultiMap::RemoveKey

调用此方法以删除给定键的所有键/值元素。

size_t RemoveKey(KINARGTYPE key) throw();

参数


指定标识要删除的元素的键。

返回值

返回与给定键关联的值的数量。

备注

RemoveKey 删除所有键与 key 匹配的键/值元素。

有关其他可用方法的信息,请参阅基类 CRBTree 的文档。

示例

请参阅 CRBMultiMap::CRBMultiMap 的示例。

另请参阅

CRBTree 类
CAtlMap 类
CRBMap 类
类概述