Condividi tramite


Classe CRBMultiMap

Questa classe rappresenta una struttura di mapping che consente di associare ogni chiave a più di un valore, usando un albero binario Red-Black.

Sintassi

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

Parametri

K
Tipo di elemento chiave.

V
Tipo di elemento value.

KTraits
Codice utilizzato per copiare o spostare elementi chiave. Per altri dettagli, vedere Classe CElementTraits.

VTraits
Codice utilizzato per copiare o spostare elementi valore.

Membri

Costruttori pubblici

Nome Descrizione
CRBMultiMap::CRBMultiMap Costruttore.
CRBMultiMap::~CRBMultiMap Distruttore.

Metodi pubblici

Nome Descrizione
CRBMultiMap::FindFirstWithKey Chiamare questo metodo per trovare la posizione del primo elemento con una determinata chiave.
CRBMultiMap::GetNextValueWithKey Chiamare questo metodo per ottenere il valore associato a una chiave specificata e aggiornare il valore della posizione.
CRBMultiMap::GetNextWithKey Chiamare questo metodo per ottenere l'elemento associato a una chiave specificata e aggiornare il valore della posizione.
CRBMultiMap::Insert Chiamare questo metodo per inserire una coppia di elementi nella mappa.
CRBMultiMap::RemoveKey Chiamare questo metodo per rimuovere tutti gli elementi chiave/valore per una determinata chiave.

Osservazioni:

CRBMultiMap fornisce il supporto per una matrice di mapping di qualsiasi tipo specificato, gestendo una matrice ordinata di elementi chiave e valori. A differenza della classe CRBMap , ogni chiave può essere associata a più di un valore.

Gli elementi (costituiti da una chiave e un valore) vengono archiviati in una struttura ad albero binaria usando il metodo CRBMultiMap::Insert . Gli elementi possono essere rimossi usando il metodo CRBMultiMap::RemoveKey , che elimina tutti gli elementi che corrispondono alla chiave specificata.

L'attraversamento dell'albero è reso possibile con metodi come CRBTree::GetHeadPosition, CRBTree::GetNext e CRBTree::GetNextValue. L'accesso a più valori per chiave è possibile usando i metodi CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey e CRBMultiMap::GetNextWithKey . Vedere l'esempio per CRBMultiMap::CRBMultiMap per un'illustrazione di questa procedura in pratica.

I parametri KTraits e VTraits sono classi di tratti che contengono qualsiasi codice supplementare necessario per copiare o spostare elementi.

CRBMultiMap deriva da CRBTree, che implementa un albero binario usando l'algoritmo Red-Black. Un'alternativa a CRBMultiMap e è offerta dalla classe CAtlMapCRBMap. Quando è necessario archiviare solo un numero ridotto di elementi, prendere in considerazione l'uso della classe CSimpleMap .

Per una descrizione più completa delle varie classi di raccolte e delle relative caratteristiche e caratteristiche delle prestazioni, vedere Classi di raccolta ATL.

Gerarchia di ereditarietà

CRBTree

CRBMultiMap

Requisiti

Intestazione: atlcoll.h

CRBMultiMap::CRBMultiMap

Costruttore.

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

Parametri

nBlockSize
Dimensione del blocco.

Osservazioni:

Il parametro nBlockSize è una misura della quantità di memoria allocata quando è necessario un nuovo elemento. Le dimensioni dei blocchi maggiori riducono le chiamate alle routine di allocazione della memoria, ma usano più risorse. Il valore predefinito allocherà spazio per 10 elementi alla volta.

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

Esempio

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

Distruttore.

~CRBMultiMap() throw();

Osservazioni:

Libera tutte le risorse allocate.

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

CRBMultiMap::FindFirstWithKey

Chiamare questo metodo per trovare la posizione del primo elemento con una determinata chiave.

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

Parametri

key
Specifica la chiave che identifica l'elemento da trovare.

Valore restituito

Restituisce l'elemento POSITION del primo elemento chiave/valore se la chiave viene trovata, NULL in caso contrario.

Osservazioni:

Una chiave in CRBMultiMap può avere uno o più valori associati. Questo metodo fornirà il valore di posizione del primo valore (che può, in effetti, essere l'unico valore) associato a tale chiave specifica. Il valore della posizione restituito può quindi essere usato con CRBMultiMap::GetNextValueWithKey o CRBMultiMap::GetNextWithKey per ottenere il valore e aggiornare la posizione.

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

Esempio

Vedere l'esempio per CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextValueWithKey

Chiamare questo metodo per ottenere il valore associato a una determinata chiave e aggiornare il valore della posizione.

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

Parametri

pos
Valore della posizione, ottenuto con una chiamata a CRBMultiMap::FindFirstWithKey o CRBMultiMap::GetNextWithKey o una chiamata precedente a GetNextValueWithKey.

key
Specifica la chiave che identifica l'elemento da trovare.

Valore restituito

Restituisce la coppia di elementi associata alla chiave specificata.

Osservazioni:

Il valore della posizione viene aggiornato in modo che punti al valore successivo associato alla chiave. Se non esistono più valori, il valore della posizione viene impostato su NULL.

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

Esempio

Vedere l'esempio per CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextWithKey

Chiamare questo metodo per ottenere l'elemento associato a una chiave specificata e aggiornare il valore della posizione.

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

Parametri

pos
Valore di posizione, ottenuto con una chiamata a CRBMultiMap::FindFirstWithKey o CRBMultiMap::GetNextValueWithKey o una chiamata precedente a GetNextWithKey.

key
Specifica la chiave che identifica l'elemento da trovare.

Valore restituito

Restituisce l'elemento CRBTree::CPair Class successivo associato alla chiave specificata.

Osservazioni:

Il valore della posizione viene aggiornato in modo che punti al valore successivo associato alla chiave. Se non esistono più valori, il valore della posizione viene impostato su NULL.

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

CRBMultiMap::Insert

Chiamare questo metodo per inserire una coppia di elementi nella mappa.

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

Parametri

key
Valore della chiave da aggiungere all'oggetto CRBMultiMap .

value
Valore da aggiungere all'oggetto CRBMultiMap associato alla chiave.

Valore restituito

Restituisce la posizione della coppia di elementi chiave/valore nell'oggetto CRBMultiMap .

Osservazioni:

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

Esempio

Vedere l'esempio per CRBMultiMap::CRBMultiMap.

CRBMultiMap::RemoveKey

Chiamare questo metodo per rimuovere tutti gli elementi chiave/valore per una determinata chiave.

size_t RemoveKey(KINARGTYPE key) throw();

Parametri

key
Specifica la chiave che identifica gli elementi da eliminare.

Valore restituito

Restituisce il numero di valori associati alla chiave specificata.

Osservazioni:

RemoveKey elimina tutti gli elementi chiave/valore con una chiave corrispondente alla chiave.

Per informazioni sugli altri metodi disponibili, vedere la documentazione relativa alla classe base CRBTree .

Esempio

Vedere l'esempio per CRBMultiMap::CRBMultiMap.

Vedi anche

Classe CRBTree
Classe CAtlMap
Classe CRBMap
Cenni preliminari sulla classe