Partilhar via


Classe CRBMultiMap

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe representa uma estrutura de mapeamento que permite que cada chave seja associada a mais do que 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-chave.

V
O tipo de elemento valor.

KTraits
O código usado para copiar ou mover elementos-chave. Consulte a Classe CElementTraits para mais detalhes.

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

Membros

Construtores Públicos

Nome Description
CRBMultiMap::CRBMultiMap O construtor.
CRBMultiMap::~CRBMultiMap O destruidor.

Métodos Públicos

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

Observações

CRBMultiMap fornece suporte para um array de mapeamento de qualquer tipo, gerindo um array ordenado de elementos-chave e valores. Ao contrário da classe CRBMap , cada chave pode ser associada a mais do que um valor.

Os elementos (constituídos por uma chave e um valor) são armazenados numa estrutura de árvore binária, usando o método CRBMultiMap::Insert . Os elementos podem ser removidos usando o método CRBMultiMap::RemoveKey , que elimina todos os elementos que correspondam à chave dada.

A percorrência da árvore é possível graças a métodos como CRBTree::GetHeadPosition, CRBTree::GetNext e CRBTree::GetNextValue. É possível aceder aos valores potencialmente múltiplos por chave usando os métodos CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey e CRBMultiMap::GetNextWithKey . Veja o exemplo de CRBMultiMap::CRBMultiMap para uma ilustração disto 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.

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

Para uma discussão mais completa das várias classes de coleção e das suas características e características de desempenho, consulte Classes de Coleção ATL.

Hierarquia de herança

CRBTree

CRBMultiMap

Requerimentos

Cabeçalho: atlcoll.h

CRBMultiMap::CRBMultiMap

O construtor.

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

Parâmetros

nBlockSize
O tamanho do bloco.

Observações

O parâmetro nBlockSize é uma medida da quantidade de memória alocada quando um novo elemento é necessário. Blocos maiores reduzem chamadas para rotinas de alocação de memória, mas consomem mais recursos. O padrão aloca espaço para 10 elementos de cada vez.

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

Example

// 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();

Observações

Liberta quaisquer recursos alocados.

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

CRBMultiMap::FindFirstWithKey

Chame este método para encontrar a posição do primeiro elemento com uma dada chave.

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

Parâmetros

chave
Especifica a chave que identifica o elemento a encontrar.

Valor de retorno

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

Observações

Uma chave no CRBMultiMap pode ter um ou mais valores associados. Este método fornecerá o valor da posição do primeiro valor (que pode, de facto, ser o único valor) associado a essa chave em particular. O valor da posição devolvido pode então ser usado com CRBMultiMap::GetNextValueWithKey ou CRBMultiMap::GetNextWithKey para obter o valor e atualizar a posição.

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

Example

Veja o exemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextValueWithKey

Chame este método para obter o valor associado a uma dada chave e atualizar o valor da posição.

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

Parâmetros

Ponto de venda
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 encontrar.

Valor de retorno

Devolve o par de elementos associado à chave dada.

Observações

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

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

Example

Veja o exemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextWithKey

Chame este método para obter o elemento associado a uma dada chave e atualizar o valor da posição.

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

Parâmetros

Ponto de venda
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 encontrar.

Valor de retorno

Devolve o próximo elemento de classe CRBTree::CPair associado à chave dada.

Observações

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

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

CRBMultiMap::Insert

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

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

Parâmetros

chave
O valor-chave a acrescentar ao CRBMultiMap objeto.

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

Valor de retorno

Devolve a posição do par chave/valor no CRBMultiMap objeto.

Observações

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

Example

Veja o exemplo de CRBMultiMap::CRBMultiMap.

CRBMultiMap::RemoveKey

Chame este método para remover todos os elementos chave/valor de uma dada chave.

size_t RemoveKey(KINARGTYPE key) throw();

Parâmetros

chave
Especifica a chave que identifica o(s) elemento(s) a eliminar.

Valor de retorno

Devolve o número de valores associados à chave dada.

Observações

RemoveKey Apaga todos os elementos de chave/valor que têm uma chave correspondente à chave.

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

Example

Veja o exemplo de CRBMultiMap::CRBMultiMap.

Consulte também

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