Compartir a través de


CRBMultiMap (clase)

Esta clase representa una estructura de asignación que permite que cada clave se pueda asociar a más de un valor mediante un árbol binario Red-Black.

Sintaxis

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

Parámetros

K
Tipo de elemento clave.

V
Tipo de elemento de valor.

KTraits
Código usado para copiar o mover elementos de clave. Consulte CElementTraits (clase) para más información.

VTraits
Código usado para copiar o mover elementos de valor.

Miembros

Constructores públicos

Nombre Descripción
CRBMultiMap::CRBMultiMap Constructor .
CRBMultiMap::~CRBMultiMap El destructor .

Métodos públicos

Nombre Descripción
CRBMultiMap::FindFirstWithKey Llame a este método para buscar la posición del primer elemento con una clave determinada.
CRBMultiMap::GetNextValueWithKey Llame a este método para obtener el valor asociado a una clave determinada y actualizar el valor de posición.
CRBMultiMap::GetNextWithKey Llame a este método para obtener el elemento asociado a una clave determinada y actualizar el valor de posición.
CRBMultiMap::Insert Llame a este método para insertar un par de elementos en el mapa.
CRBMultiMap::RemoveKey Llame a este método para quitar todos los elementos clave-valor de una clave determinada.

Comentarios

CRBMultiMap proporciona compatibilidad con una matriz de asignación de cualquier tipo determinado, y administra una matriz ordenada de valores y elementos de clave. A diferencia de la clase CRBMap, cada clave se puede asociar a más de un valor.

Los elementos (que constan de una clave y un valor) se almacenan en una estructura de árbol binario mediante el método CRBMultiMap::Insert. Los elementos se pueden quitar mediante el método CRBMultiMap::RemoveKey, que elimina todos los elementos que coinciden con la clave especificada.

Recorrer el árbol es posible con métodos como CRBTree::GetHeadPosition, CRBTree::GetNext y CRBTree::GetNextValue. El acceso a los valores potencialmente múltiples por clave es posible mediante los métodos CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey y CRBMultiMap::GetNextWithKey. Consulte el ejemplo de CRBMultiMap::CRBMultiMap para ver una ilustración de este escenario en la práctica.

Los parámetros KTraits y VTraits son clases de rasgos que contienen cualquier código complementario necesario para copiar o mover elementos.

CRBMultiMap se deriva de CRBTree, que implementa un árbol binario mediante el algoritmo Red-Black. La clase CRBMultiMapCAtlMapCRBMap ofrece una alternativa a y . Cuando solo es necesario almacenar un pequeño número de elementos, considere la posibilidad de usar la clase CSimpleMap en su lugar.

Para obtener una explicación más completa de las distintas clases de colección y sus características y características de rendimiento, consulte Clases de colección de ATL.

Jerarquía de herencia

CRBTree

CRBMultiMap

Requisitos

Encabezado: atlcoll.h

CRBMultiMap::CRBMultiMap

Constructor .

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

Parámetros

nBlockSize
Tamaño del bloque.

Comentarios

El parámetro nBlockSize es una medida de la cantidad de memoria asignada cuando se requiere un nuevo elemento. Los tamaños de bloque más grandes reducen las llamadas a rutinas de asignación de memoria, pero usan más recursos. El valor predeterminado asignará espacio para 10 elementos a la vez.

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

Ejemplo

// 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

El destructor .

~CRBMultiMap() throw();

Comentarios

Libera los recursos asignados.

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

CRBMultiMap::FindFirstWithKey

Llame a este método para buscar la posición del primer elemento con una clave determinada.

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

Parámetros

key
Especifica la clave que identifica el elemento que se va a buscar.

Valor devuelto

Devuelve la posición del primer elemento clave-valor si se encuentra la clave; de lo contrario, devuelve NULL.

Comentarios

Una clave de CRBMultiMap puede tener uno o varios valores asociados. Este método proporcionará el valor de posición del primer valor (que puede, de hecho, ser el único valor) asociado a esa clave determinada. A continuación, el valor de posición devuelto se puede usar con CRBMultiMap::GetNextValueWithKey o CRBMultiMap::GetNextWithKey para obtener el valor y actualizar la posición.

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

Ejemplo

Vea el ejemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextValueWithKey

Llame a este método para obtener el valor asociado a una clave determinada y actualizar el valor de posición.

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

Parámetros

pos
Valor de posición, obtenido con una llamada a CRBMultiMap::FindFirstWithKey o CRBMultiMap::GetNextWithKey, o una llamada anterior a GetNextValueWithKey.

key
Especifica la clave que identifica el elemento que se va a buscar.

Valor devuelto

Devuelve el par de elementos asociado a la clave especificada.

Comentarios

El valor de posición se actualiza para que apunte al siguiente valor asociado a la clave. Si no existen más valores, el valor de posición se establece en NULL.

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

Ejemplo

Vea el ejemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextWithKey

Llame a este método para obtener el elemento asociado a una clave determinada y actualizar el valor de posición.

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

Parámetros

pos
Valor de posición, obtenido con una llamada a CRBMultiMap::FindFirstWithKey o CRBMultiMap::GetNextValueWithKey, o una llamada anterior a GetNextWithKey.

key
Especifica la clave que identifica el elemento que se va a buscar.

Valor devuelto

Devuelve el siguiente elemento CRBTree::CPair Class asociado a la clave especificada.

Comentarios

El valor de posición se actualiza para que apunte al siguiente valor asociado a la clave. Si no existen más valores, el valor de posición se establece en NULL.

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

CRBMultiMap::Insert

Llame a este método para insertar un par de elementos en el mapa.

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

Parámetros

key
Valor de clave que se va a agregar al objeto CRBMultiMap.

value
El valor que se debe agregar al objeto CRBMultiMap, asociado a la clave key.

Valor devuelto

Devuelve la posición del par de elementos clave-valor del objeto CRBMultiMap.

Comentarios

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

Ejemplo

Vea el ejemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::RemoveKey

Llame a este método para quitar todos los elementos clave-valor de una clave determinada.

size_t RemoveKey(KINARGTYPE key) throw();

Parámetros

key
Especifica la clave que identifica los elementos que se van a eliminar.

Valor devuelto

Devuelve el número de valores asociados a la clave especificada.

Comentarios

RemoveKey elimina todos los elementos clave-valor que tienen una clave que coincide con el valor key.

Consulte la documentación de la clase base CRBTree para información sobre los demás métodos disponibles.

Ejemplo

Vea el ejemplo de CRBMultiMap::CRBMultiMap.

Consulte también

CRBTree (clase)
CAtlMap (clase)
CRBMap (clase)
Información general sobre la clase