Compartilhar via


Classe CRBMultiMap

Essa classe representa uma estrutura de mapeamento que permite que cada chave possa ser associada a mais de um valor, usando uma árvore binária Red-Black.

Sintaxe

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

Parâmetros

K
O tipo de elemento key.

V
O tipo de elemento valor.

KTraits
O código usado para copiar ou mover elementos de chave. Confira a classe CElementTraits para obter mais detalhes.

VTraits
O código usado para copiar ou mover elementos valor.

Membros

Construtores públicos

Nome Descrição
CRBMultiMap::CRBMultiMap O construtor .
CRBMultiMap::~CRBMultiMap O destruidor.

Métodos públicos

Nome Descrição
CRBMultiMap::FindFirstWithKey Chame esse método para localizar a posição do primeiro elemento com uma determinada chave.
CRBMultiMap::GetNextValueWithKey Chame esse método para obter o valor associado a uma determinada chave e atualize o valor da posição.
CRBMultiMap::GetNextWithKey Chame esse método para obter o elemento associado a uma determinada chave e atualize o valor da posição.
CRBMultiMap::Insert Chame esse método para inserir um par de elementos no mapa.
CRBMultiMap::RemoveKey Chame esse método para remover todos os elementos chave/valor de uma determinada chave.

Comentários

A CRBMultiMap fornece suporte para uma matriz de mapeamento de qualquer tipo específico, gerenciando uma matriz ordenada de elementos de chave e valores. Ao contrário da classe CRBMap, cada chave pode ser associada a mais de um valor.

Os elementos (que consistem em uma chave e um valor) são armazenados em uma estrutura de árvore binária, usando o método CRBMultiMap::Insert. Os elementos podem ser removidos usando o método CRBMultiMap::RemoveKey, que exclui todos os elementos que correspondem à chave fornecida.

A passagem pela árvore é possível com métodos como CRBTree::GetHeadPosition, CRBTree::GetNext e CRBTree::GetNextValue. É possível acessar os valores potencialmente múltiplos por chave usando os métodos CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey e CRBMultiMap::GetNextWithKey. Consulte o exemplo de CRBMultiMap::CRBMultiMap para obter uma ilustração disso na prática.

Os parâmetros KTraits e VTraits são classes de características que contêm qualquer código suplementar necessário para copiar ou mover elementos.

A CRBMultiMap é derivada da CRBTree, que implementa uma árvore binária usando o algoritmo Red-Black. Uma alternativa para CRBMultiMap e CRBMap é oferecida pela classe CAtlMap. Quando apenas um pequeno número de elementos precisar ser armazenado, considere usar a classe CSimpleMap.

Para obter uma discussão mais completa sobre as várias classes de coleção e seus recursos e características de desempenho, confira Classes de coleção da ATL.

Hierarquia de herança

CRBTree

CRBMultiMap

Requisitos

Cabeçalho: atlcoll.h

CRBMultiMap::CRBMultiMap

O construtor .

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

Parâmetros

nBlockSize
O tamanho do bloco.

Comentários

O parâmetro nBlockSize é uma medida da quantidade de memória alocada quando um novo elemento é necessário. Tamanhos de bloco maiores reduzem as chamadas às rotinas de alocação de memória, mas usam mais recursos. O padrão alocará espaço para 10 elementos por vez.

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

Exemplo

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

O destruidor.

~CRBMultiMap() throw();

Comentários

Libera todos os recursos alocados.

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

CRBMultiMap::FindFirstWithKey

Chame esse método para localizar a posição do primeiro elemento com uma determinada chave.

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

Parâmetros

chave
Especifica a chave que identifica o elemento a ser encontrado.

Valor de retorno

Retorna a POSIÇÃO do primeiro elemento chave/valor se a chave for encontrada, caso contrário, NULL.

Comentários

Uma chave no CRBMultiMap pode ter um ou mais valores associados. Esse método fornecerá o valor de posição do primeiro valor (que pode, de fato, ser o único valor) associado a essa chave específica. O valor da posição retornado pode ser usado com CRBMultiMap::GetNextValueWithKey ou CRBMultiMap::GetNextWithKey para obter o valor e atualizar a posição.

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

Exemplo

Consulte o exemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextValueWithKey

Chame esse método para obter o valor associado a uma determinada chave e atualize o valor da posição.

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

Parâmetros

pos
O valor da posição, obtido com uma chamada para CRBMultiMap::FindFirstWithKey ou CRBMultiMap::GetNextWithKey ou uma chamada anterior para GetNextValueWithKey.

chave
Especifica a chave que identifica o elemento a ser encontrado.

Valor de retorno

Retorna o par de elementos associado à chave fornecida.

Comentários

O valor da posição é atualizado para apontar para o próximo valor associado à chave. Se não existirem mais valores, o valor da posição será definido como NULL.

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

Exemplo

Consulte o exemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextWithKey

Chame esse método para obter o elemento associado a uma determinada chave e atualize o valor da posição.

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

Parâmetros

pos
O valor da posição, obtido com uma chamada para CRBMultiMap::FindFirstWithKey ou CRBMultiMap::GetNextValueWithKey ou uma chamada anterior para GetNextWithKey.

chave
Especifica a chave que identifica o elemento a ser encontrado.

Valor de retorno

Retorna o próximo elemento da classe CRBTree::CPair associado à chave fornecida.

Comentários

O valor da posição é atualizado para apontar para o próximo valor associado à chave. Se não existirem mais valores, o valor da posição será definido como NULL.

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

CRBMultiMap::Insert

Chame esse método para inserir um par de elementos no mapa.

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

Parâmetros

chave
O valor da chave a ser adicionado ao objeto CRBMultiMap.

value
O valor a ser adicionado ao objeto CRBMultiMap, associado à chave.

Valor de retorno

Retorna a posição do par de elementos chave/valor no objeto CRBMultiMap.

Comentários

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

Exemplo

Consulte o exemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::RemoveKey

Chame esse método para remover todos os elementos chave/valor de uma determinada chave.

size_t RemoveKey(KINARGTYPE key) throw();

Parâmetros

chave
Especifica a chave que identifica os elementos a serem excluídos.

Valor de retorno

Retorna o número de valores associados à chave determinada.

Comentários

RemoveKey exclui todos os elementos chave/valor que têm uma chave que corresponde à chave.

Confira a documentação da classe base CRBTree para obter informações sobre os outros métodos disponíveis.

Exemplo

Consulte o exemplo de CRBMultiMap::CRBMultiMap.

Confira também

Classe CRBTree
Classe CAtlMap
Classe CRBMap
Visão geral da aula