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