Поделиться через


Класс CRBMultiMap

Этот класс представляет структуру сопоставления, которая позволяет связать каждый ключ с несколькими значениями, используя двоичное дерево Red-Black.

Синтаксис

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

Параметры

K
Тип ключевого элемента.

V
Тип элемента value.

KTraits
Код, используемый для копирования или перемещения ключевых элементов. Дополнительные сведения см. в классе CElementTraits.

Виртуальные признаки
Код, используемый для копирования или перемещения элементов значения.

Участники

Открытые конструкторы

Имя Описание
CRBMultiMap::CRBMultiMap Конструктор.
CRBMultiMap::~CRBMultiMap Деструктор

Открытые методы

Имя Описание
CRBMultiMap::FindFirstWithKey Вызовите этот метод, чтобы найти позицию первого элемента с заданным ключом.
CRBMultiMap::GetNextValueWithKey Вызовите этот метод, чтобы получить значение, связанное с заданным ключом, и обновить значение позиции.
CRBMultiMap::GetNextWithKey Вызовите этот метод, чтобы получить элемент, связанный с заданным ключом, и обновить значение позиции.
CRBMultiMap::Insert Вызовите этот метод, чтобы вставить пару элементов в карту.
CRBMultiMap::RemoveKey Вызовите этот метод, чтобы удалить все элементы key/value для заданного ключа.

Замечания

CRBMultiMap обеспечивает поддержку массива сопоставления любого заданного типа, управляя упорядоченным массивом ключевых элементов и значений. В отличие от класса CRBMap, каждый ключ может быть связан с несколькими значениями.

Элементы (состоящие из ключа и значения) хранятся в двоичной структуре дерева с помощью метода CRBMultiMap::Insert . Элементы можно удалить с помощью метода CRBMultiMap::RemoveKey , который удаляет все элементы, соответствующие заданному ключу.

Обход дерева возможен с помощью таких методов, как CRBTree::GetHeadPosition, CRBTree::GetNext и CRBTree::GetNextValue. Доступ к потенциально нескольким значениям на ключ возможен с помощью методов CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey и CRBMultiMap::GetNextWithKey. Пример CRBMultiMap ::CRBMultiMap для иллюстрации этого примера.

Параметры KTraits и VTraits — это классы признаков, содержащие любой дополнительный код, необходимый для копирования или перемещения элементов.

CRBMultiMap является производным от CRBTree, который реализует двоичное дерево с помощью алгоритма Red-Black. CRBMultiMap Альтернатива и CRBMap предоставляется классом CAtlMap. Если нужно хранить только небольшое количество элементов, рассмотрите возможность использования класса 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();

Параметры

key
Указывает ключ, определяющий найденный элемент.

Возвращаемое значение

Возвращает значение POSITION первого элемента key/value, если ключ найден, значение 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.

key
Указывает ключ, определяющий найденный элемент.

Возвращаемое значение

Возвращает пару элементов, связанную с заданным ключом.

Замечания

Значение позиции обновляется, чтобы указать следующее значение, связанное с ключом. Если больше значений нет, то для значения позиции задано значение 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.

key
Указывает ключ, определяющий найденный элемент.

Возвращаемое значение

Возвращает следующий элемент CRBTree::CPair Class , связанный с заданным ключом.

Замечания

Значение позиции обновляется, чтобы указать следующее значение, связанное с ключом. Если больше значений нет, то для значения позиции задано значение NULL.

Дополнительные сведения о других доступных методах см. в документации по базовому классу CRBTree .

CRBMultiMap::Insert

Вызовите этот метод, чтобы вставить пару элементов в карту.

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

Параметры

key
Значение ключа для добавления в CRBMultiMap объект.

значение
Значение, добавляемое к объекту, связанное CRBMultiMap с ключом.

Возвращаемое значение

Возвращает позицию пары элементов key/value в объекте CRBMultiMap .

Замечания

Дополнительные сведения о других доступных методах см. в документации по базовому классу CRBTree .

Пример

См. пример CRBMultiMap ::CRBMultiMap.

CRBMultiMap::RemoveKey

Вызовите этот метод, чтобы удалить все элементы key/value для заданного ключа.

size_t RemoveKey(KINARGTYPE key) throw();

Параметры

key
Указывает ключ, определяющий удаленные элементы.

Возвращаемое значение

Возвращает количество значений, связанных с заданным ключом.

Замечания

RemoveKey удаляет все элементы ключа или значения, имеющие ключ, соответствующий ключу.

Дополнительные сведения о других доступных методах см. в документации по базовому классу CRBTree .

Пример

См. пример CRBMultiMap ::CRBMultiMap.

См. также

Класс CRBTree
Класс CAtlMap
Класс CRBMap
Общие сведения о классе