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::GetHeadPosition、CRBTree::GetNext 和 CRBTree::GetNextValue 等方法可以遍历树。 使用 CRBMultiMap::FindFirstWithKey、CRBMultiMap::GetNextValueWithKey 和 CRBMultiMap::GetNextWithKey 方法可以访问每个键可能存在的多个值。 请参阅 CRBMultiMap::CRBMultiMap 的示例以在实践中对此进行说明。
KTraits 和 VTraits 参数是包含复制或移动元素所需的任何补充代码的特征类。
CRBMultiMap
派生自 CRBTree,后者使用红黑算法实现二叉树。 CAtlMap 类提供了 CRBMultiMap
和 CRBMap
这两者的替代方法。 只需要存储少量元素时,请考虑改用 CSimpleMap 类。
有关各种集合类及其特性和性能特征的更完整讨论,请参阅 ATL 集合类。
继承层次结构
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::GetNextValueWithKey 或 CRBMultiMap::GetNextWithKey 一起使用以获取值并更新位置。
有关其他可用方法的信息,请参阅基类 CRBTree 的文档。
示例
请参阅 CRBMultiMap::CRBMultiMap 的示例。
CRBMultiMap::GetNextValueWithKey
调用此方法以获取与给定键关联的值,并更新位置值。
const V& GetNextValueWithKey(
POSITION& pos,
KINARGTYPE key) const throw();
V& GetNextValueWithKey(
POSITION& pos,
KINARGTYPE key) throw();
参数
pos
位置值,获取方式是调用 CRBMultiMap::FindFirstWithKey 或 CRBMultiMap::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::FindFirstWithKey 或 CRBMultiMap::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 的示例。