Condividi tramite


Classe CMapStringToOb

Classe di raccolte dizionario che esegue il mapping di oggetti CString univoci ai puntatori CObject .

Sintassi

class CMapStringToOb : public CObject

Membri

Costruttori pubblici

Nome Descrizione
CMapStringToOb::CMapStringToOb Costruttore.

Metodi pubblici

Nome Descrizione
CMapStringToOb::GetCount Restituisce il numero di elementi in questa mappa.
CMapStringToOb::GetHashTableSize Determina il numero corrente di elementi nella tabella hash.
CMapStringToOb::GetNextAssoc Ottiene l'elemento successivo per l'iterazione.
CMapStringToOb::GetSize Restituisce il numero di elementi in questa mappa.
CMapStringToOb::GetStartPosition Restituisce la posizione del primo elemento.
CMapStringToOb::HashKey Calcola il valore hash di una chiave specificata.
CMapStringToOb::InitHashTable Inizializza la tabella hash.
CMapStringToOb::IsEmpty Verifica la condizione della mappa vuota (nessun elemento).
CMapStringToOb::Lookup Cerca un puntatore void in base alla chiave del puntatore void. Il valore del puntatore, non l'entità a cui punta, viene usato per il confronto delle chiavi.
CMapStringToOb::LookupKey Restituisce un riferimento alla chiave associata al valore di chiave specificato.
CMapStringToOb::RemoveAll Rimuove tutti gli elementi da questa mappa.
CMapStringToOb::RemoveKey Rimuove un elemento specificato da una chiave.
CMapStringToOb::SetAt Inserisce un elemento nella mappa; sostituisce un elemento esistente se viene trovata una chiave corrispondente.

Operatori pubblici

Nome Descrizione
CMapStringToOb::operator [ ] Inserisce un elemento nella mappa , ovvero la sostituzione dell'operatore per SetAt.

Osservazioni:

Dopo aver inserito una CString- CObject* coppia (elemento) nella mappa, è possibile recuperare o eliminare in modo efficiente la coppia usando una stringa o un CString valore come chiave. È anche possibile scorrere tutti gli elementi della mappa.

Una variabile di tipo POSITION viene usata per l'accesso alternativo alle voci in tutte le varianti della mappa. È possibile usare un POSITION oggetto per "ricordare" una voce e per scorrere la mappa. Si potrebbe pensare che questa iterazione sia sequenziale in base al valore della chiave; Non lo è. La sequenza di elementi recuperati è indeterminato.

CMapStringToOb incorpora la macro IMPLEMENT_SERIAL per supportare la serializzazione e il dump dei relativi elementi. Ogni elemento viene serializzato a sua volta se una mappa viene archiviata in un archivio, con l'operatore di inserimento di overload ( <<) o con la Serialize funzione membro.

Se è necessario un dump di diagnostica dei singoli elementi nella mappa (il CString valore e il CObject contenuto), è necessario impostare la profondità del contesto di dump su 1 o superiore.

Quando un CMapStringToOb oggetto viene eliminato o quando i relativi elementi vengono rimossi, gli CString oggetti e i CObject puntatori vengono rimossi. Gli oggetti a cui fanno riferimento i CObject puntatori non vengono eliminati definitivamente.

La derivazione della classe Map è simile alla derivazione list. Vedere l'articolo Raccolte per un'illustrazione della derivazione di una classe di elenco per scopi speciali.

Gerarchia di ereditarietà

CObject

CMapStringToOb

Requisiti

Intestazione: afxcoll.h

CMapStringToOb::CMapStringToOb

Costruisce un oggetto -to- CObject* vuotoCString.

CMapStringToOb(INT_PTR nBlockSize = 10);

Parametri

nBlockSize
Specifica la granularità di allocazione della memoria per estendere la mappa.

Osservazioni:

Man mano che la mappa aumenta, la memoria viene allocata in unità di nBlockSize voci.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb:: CMapStringToOb.

Classe Funzione membro
CMapPtrToPtr CMapPtrToPtr( INT_PTR nBlockSize = 10 );
CMapPtrToWord CMapPtrToWord( INT_PTR nBlockSize = 10 );
CMapStringToPtr CMapStringToPtr( INT_PTR nBlockSize = 10 );
CMapStringToString CMapStringToString( INT_PTR nBlockSize = 10 );
CMapWordToOb CMapWordToOb( INT_PTR nBlockSize = 10 );
CMapWordToPtr MapWordToPtr( INT_PTR nBlockSize = 10 );

Esempio

CMapStringToOb map(20); // Map on the stack with blocksize of 20

CMapStringToOb *pm = new CMapStringToOb; // Map on the heap
                                         // with default blocksize

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb::GetCount

Determina il numero di elementi presenti nella mappa.

INT_PTR GetCount() const;

Valore restituito

Numero di elementi in questa mappa.

Osservazioni:

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::GetCount.

Classe Funzione membro
CMapPtrToPtr INT_PTR GetCount() const;
CMapPtrToWord INT_PTR GetCount() const;
CMapStringToPtr INT_PTR GetCount() const;
CMapStringToString INT_PTR GetCount() const;
CMapWordToOb INT_PTR GetCount() const;
CMapWordToPtr INT_PTR GetCount() const;

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetCount() == 2);

CMapStringToOb::GetHashTableSize

Determina il numero corrente di elementi nella tabella hash.

UINT GetHashTableSize() const;

Valore restituito

Restituisce il numero di elementi nella tabella hash.

Osservazioni:

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::GetHashTableSize.

Classe Funzione membro
CMapPtrToPtr UINT GetHashTableSize() const;
CMapPtrToWord UINT GetHashTableSize() const;
CMapStringToPtr UINT GetHashTableSize() const;
CMapStringToString UINT GetHashTableSize() const;
CMapWordToOb UINT GetHashTableSize() const;
CMapWordToPtr UINT GetHashTableSize() const;

CMapStringToOb::GetNextAssoc

Recupera l'elemento della mappa in rNextPosition, quindi aggiorna rNextPosition per fare riferimento all'elemento successivo nella mappa.

void GetNextAssoc(
    POSITION& rNextPosition,
    CString& rKey,
    CObject*& rValue) const;

Parametri

rNextPosition
Specifica un riferimento a un valore POSITION restituito da una chiamata o GetStartPosition precedenteGetNextAssoc.

rKey
Specifica la chiave restituita dell'elemento recuperato (stringa).

rValue
Specifica il valore restituito dell'elemento recuperato (un CObject puntatore). Per altre informazioni su questo parametro, vedere la sezione Note .

Osservazioni:

Questa funzione è più utile per scorrere tutti gli elementi della mappa. Si noti che la sequenza di posizione non corrisponde necessariamente alla sequenza di valori chiave.

Se l'elemento recuperato è l'ultimo nella mappa, il nuovo valore di rNextPosition viene impostato su NULL.

Per il parametro assicurarsi di eseguire il cast del rValue tipo di oggetto in CObject*&, che è ciò che il compilatore richiede, come illustrato nell'esempio seguente:

CObject *ob;
map.GetNextAssoc(pos, key, (CObject *&)ob);

Questo non GetNextAssoc vale per le mappe basate sui modelli.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::GetNextAssoc.

Classe Funzione membro
CMapPtrToPtr void GetNextAssoc( POSITION& rNextPosition , void*& rKey , void*& rValue ) const;
CMapPtrToWord void GetNextAssoc( POSITION& rNextPosition , void*& rKey , WORD& rValue ) const;
CMapStringToPtr void GetNextAssoc( POSITION& rNextPosition , CString& rKey , void*& rValue ) const;
CMapStringToString void GetNextAssoc( POSITION& rNextPosition , CString& rKey , CString& rValue ) const;
CMapWordToOb void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , CObject*& rValue ) const;
CMapWordToPtr void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , void*& rValue ) const;

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb map;
POSITION pos;
CString key;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
// Iterate through the entire map, dumping both name and age.
for (pos = map.GetStartPosition(); pos != NULL;)
{
   map.GetNextAssoc(pos, key, (CObject *&)pa);
#ifdef _DEBUG
   afxDump << key << _T(" : ") << pa << _T("\n");
#endif
}

I risultati di questo programma sono i seguenti:

Lisa : a CAge at $4724 11
Marge : a CAge at $47A8 35
Homer : a CAge at $4766 36
Bart : a CAge at $45D4 13

CMapStringToOb::GetSize

Restituisce il numero di elementi della mappa.

INT_PTR GetSize() const;

Valore restituito

Numero di elementi nella mappa.

Osservazioni:

Chiamare questo metodo per recuperare il numero di elementi nella mappa.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::GetSize.

Classe Funzione membro
CMapPtrToPtr INT_PTR GetSize() const;
CMapPtrToWord INT_PTR GetSize() const;
CMapStringToPtr INT_PTR GetSize() const;
CMapStringToString INT_PTR GetSize() const;
CMapWordToOb INT_PTR GetSize() const;
CMapWordToPtr INT_PTR GetSize() const;

Esempio

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetSize() == 2);

CMapStringToOb::GetStartPosition

Avvia un'iterazione della mappa restituendo un POSITION valore che può essere passato a una GetNextAssoc chiamata.

POSITION GetStartPosition() const;

Valore restituito

Valore POSITION che indica una posizione iniziale per l'iterazione della mappa oppure NULL se la mappa è vuota.

Osservazioni:

La sequenza di iterazione non è prevedibile; pertanto, il "primo elemento nella mappa" non ha un significato speciale.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::GetStartPosition.

Classe Funzione membro
CMapPtrToPtr POSITION GetStartPosition() const;
CMapPtrToWord POSITION GetStartPosition() const;
CMapStringToPtr POSITION GetStartPosition() const;
CMapStringToString POSITION GetStartPosition() const;
CMapWordToOb POSITION GetStartPosition() const;
CMapWordToPtr POSITION GetStartPosition() const;

Esempio

Vedere l'esempio per CMapStringToOb::GetNextAssoc.

CMapStringToOb::HashKey

Calcola il valore hash di una chiave specificata.

UINT HashKey(LPCTSTR key) const;

Parametri

key
Chiave il cui valore hash deve essere calcolato.

Valore restituito

Valore hash della chiave

Osservazioni:

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::HashKey.

Classe Funzione membro
CMapPtrToPtr UINT HashKey( void *key ) const;
CMapPtrToWord UINT HashKey( void *key ) const;
CMapStringToString UINT HashKey( LPCTSTR key ) const;
CMapStringToPtr UINT HashKey( LPCTSTR key ) const;
CMapWordToOb UINT HashKey( WORD key ) const;
CMapWordToPtr UINT HashKey( WORD key ) const;

CMapStringToOb::InitHashTable

Inizializza la tabella hash.

void InitHashTable(
    UINT hashSize,
    BOOL bAllocNow = TRUE);

Parametri

hashSize
Numero di voci nella tabella hash.

bAllocNow
Se TRUE, alloca la tabella hash all'inizializzazione; in caso contrario, la tabella viene allocata quando necessario.

Osservazioni:

Per ottenere prestazioni ottimali, le dimensioni della tabella hash devono essere un numero primo. Per ridurre al minimo le collisioni, le dimensioni devono essere approssimativamente superiori al 20% rispetto al set di dati previsto più grande.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::InitHashTable.

Classe Funzione membro
CMapPtrToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapPtrToWord void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapStringToString void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapStringToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapWordToOb void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );
CMapWordToPtr void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE );

CMapStringToOb::IsEmpty

Determina se la mappa è vuota.

BOOL IsEmpty() const;

Valore restituito

Diverso da zero se la mappa non contiene elementi; in caso contrario, 0.

Esempio

Vedere l'esempio per RemoveAll.

Osservazioni:

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb:: IsEmpty.

Classe Funzione membro
CMapPtrToPtr BOOL IsEmpty() const;
CMapPtrToWord BOOL IsEmpty() const;
CMapStringToPtr BOOL IsEmpty() const;
CMapStringToString BOOL IsEmpty() const;
CMapWordToOb BOOL IsEmpty() const;
CMapWordToPtr BOOL IsEmpty() const;

CMapStringToOb::Lookup

Restituisce un CObject puntatore basato su un CString valore.

BOOL Lookup(
    LPCTSTR key,
    CObject*& rValue) const;

Parametri

key
Specifica la chiave stringa che identifica l'elemento da cercare.

rValue
Specifica il valore restituito dall'elemento ricercato.

Valore restituito

Diverso da zero se l'elemento è stato trovato; in caso contrario, 0.

Osservazioni:

Lookup usa un algoritmo hash per trovare rapidamente l'elemento della mappa con una chiave che corrisponde esattamente ( CString valore).

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::LookUp.

Classe Funzione membro
CMapPtrToPtr BOOL Lookup( void *key , void*& rValue ) const;
CMapPtrToWord BOOL Lookup( void *key , WORD& rValue ) const;
CMapStringToPtr BOOL Lookup( LPCTSTR key , void*& rValue ) const;
CMapStringToString BOOL Lookup( LPCTSTR key , CString& rValue ) const;
CMapWordToOb BOOL Lookup( WORD key , CObject*& rValue ) const;
CMapWordToPtr BOOL Lookup( WORD key , void*& rValue ) const;

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb map;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
ASSERT(map.Lookup(_T("Lisa"), (CObject *&)pa)); // Is "Lisa" in the map?
ASSERT(*pa == CAge(11));                        // Is she 11?

CMapStringToOb::LookupKey

Restituisce un riferimento alla chiave associata al valore di chiave specificato.

BOOL LookupKey(
    LPCTSTR key,
    LPCTSTR& rKey) const;

Parametri

key
Specifica la chiave stringa che identifica l'elemento da cercare.

rKey
Riferimento alla chiave associata.

Valore restituito

Diverso da zero se la chiave è stata trovata; in caso contrario, 0.

Osservazioni:

L'uso di un riferimento a una chiave non è sicuro se usato dopo che l'elemento associato è stato rimosso dalla mappa o dopo che la mappa è stata eliminata definitivamente.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb:: LookupKey.

Classe Funzione membro
CMapStringToPtr BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;
CMapStringToString BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const;

CMapStringToOb::operator [ ]

Un comodo sostituto della SetAt funzione membro.

CObject*& operator[ ](lpctstr key);

Valore restituito

Riferimento a un puntatore a un CObject oggetto oppure NULL se la mappa è vuota o key non è compreso nell'intervallo.

Osservazioni:

Può quindi essere usato solo sul lato sinistro di un'istruzione di assegnazione (un ).l-value Se non è presente alcun elemento mappa con la chiave specificata, viene creato un nuovo elemento.

Non esiste un "lato destro" (r-value) equivalente a questo operatore perché esiste una possibilità che una chiave non venga trovata nella mappa. Usare la funzione membro per il Lookup recupero degli elementi.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::operator [].

Classe Funzione membro
CMapPtrToPtr void*& operator[](void *key );
CMapPtrToWord WORD& operator[](void *key );
CMapStringToPtr void*& operator[](lpctstr key );
CMapStringToString CString& operator[](lpctstr key );
CMapWordToOb CObject*& operator[](word key );
CMapWordToPtr void*& operator[](word key );

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb map;

map[_T("Bart")] = new CAge(13);
map[_T("Lisa")] = new CAge(11);
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("Operator [] example: ") << &map << _T("\n");
#endif

I risultati di questo programma sono i seguenti:

Operator [] example: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $4A02 11
[Bart] = a CAge at $497E 13

CMapStringToOb::RemoveAll

Rimuove tutti gli elementi da questa mappa e elimina definitivamente gli CString oggetti chiave.

void RemoveAll();

Osservazioni:

Gli CObject oggetti a cui fa riferimento ogni chiave non vengono eliminati definitivamente. La RemoveAll funzione può causare perdite di memoria se non si garantisce che gli oggetti a cui si fa CObject riferimento vengano eliminati definitivamente.

La funzione funziona correttamente se la mappa è già vuota.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::RemoveAll.

Classe Funzione membro
CMapPtrToPtr void RemoveAll();
CMapPtrToWord void RemoveAll();
CMapStringToPtr void RemoveAll();
CMapStringToString void RemoveAll();
CMapWordToOb void RemoveAll();
CMapWordToPtr void RemoveAll();

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

{
   CMapStringToOb map;

   CAge age1(13); // Two objects on the stack
   CAge age2(36);
   map.SetAt(_T("Bart"), &age1);
   map.SetAt(_T("Homer"), &age2);
   ASSERT(map.GetCount() == 2);
   map.RemoveAll(); // CObject pointers removed; objects not removed.
   ASSERT(map.GetCount() == 0);
   ASSERT(map.IsEmpty());
} // The two CAge objects are deleted when they go out of scope.

CMapStringToOb::RemoveKey

Cerca la voce della mappa corrispondente alla chiave fornita; quindi, se viene trovata la chiave, rimuove la voce.

BOOL RemoveKey(LPCTSTR key);

Parametri

key
Specifica la stringa utilizzata per la ricerca mappa.

Valore restituito

Diverso da zero se la voce è stata trovata e rimossa correttamente; in caso contrario, 0.

Osservazioni:

Ciò può causare perdite di memoria se l'oggetto CObject non viene eliminato altrove.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::RemoveKey.

Classe Funzione membro
CMapPtrToPtr BOOL RemoveKey( void *key );
CMapPtrToWord BOOL RemoveKey( void *key );
CMapStringToPtr BOOL RemoveKey( LPCTSTR key );
CMapStringToString BOOL RemoveKey( LPCTSTR key );
CMapWordToOb BOOL RemoveKey( WORD key );
CMapWordToPtr BOOL RemoveKey( WORD key );

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb map;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
map.RemoveKey(_T("Lisa")); // Memory leak: CAge object not
                           // deleted.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveKey example: ") << &map << _T("\n");
#endif

I risultati di questo programma sono i seguenti:

RemoveKey example: A CMapStringToOb with 3 elements
[Marge] = a CAge at $49A0 35
[Homer] = a CAge at $495E 36
[Bart] = a CAge at $4634 13

CMapStringToOb::SetAt

Il metodo primario consente di inserire un elemento in una mappa.

void SetAt(
    LPCTSTR key,
    CObject* newValue);

Parametri

key
Specifica la stringa che rappresenta la chiave del nuovo elemento.

newValue
Specifica il CObject puntatore che rappresenta il valore del nuovo elemento.

Osservazioni:

In primo luogo, la chiave viene cercata. Se viene trovata la chiave, il valore corrispondente viene modificato; in caso contrario, viene creato un nuovo elemento chiave-valore.

Nella tabella seguente vengono illustrate altre funzioni membro simili a CMapStringToOb::SetAt.

Classe Funzione membro
CMapPtrToPtr void SetAt( void *key , void *newValue );
CMapPtrToWord void SetAt( void *key , WORD newValue );
CMapStringToPtr void SetAt( LPCTSTR key , void *newValue );
CMapStringToString void SetAt( LPCTSTR key , LPCTSTR newValue );
CMapWordToOb void SetAt( WORD key , CObject *newValue );
CMapWordToPtr void SetAt( WORD key , void *newValue );

Esempio

Vedere CObList::CObList per un elenco della CAge classe usata in tutti gli esempi di raccolta.

CMapStringToOb map;
CAge *pa;

map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11)); // Map contains 2
                                     // elements.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("before Lisa's birthday: ") << &map << _T("\n");
#endif
if (map.Lookup(_T("Lisa"), (CObject *&)pa))
{ // CAge 12 pointer replaces CAge 11 pointer.
   map.SetAt(_T("Lisa"), new CAge(12));
   delete pa; // Must delete CAge 11 to avoid memory leak.
}
#ifdef _DEBUG
afxDump << _T("after Lisa's birthday: ") << &map << _T("\n");
#endif

I risultati di questo programma sono i seguenti:

before Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $493C 11
[Bart] = a CAge at $4654 13
after Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $49C0 12
[Bart] = a CAge at $4654 13

Vedi anche

CObject Classe
Grafico della gerarchia
CMapPtrToPtr Classe
CMapPtrToWord Classe
CMapStringToPtr Classe
CMapStringToString Classe
CMapWordToOb Classe
CMapWordToPtr Classe