Condividi tramite


CAtlMap::CAtlMap

 

Pubblicato: aprile 2016

Costruttore.

Sintassi

      CAtlMap(
   UINT nBins = 17,
   float fOptimalLoad = 0.75f,
   float fLoThreshold = 0.25f,
   float fHiThreshold = 2.25f,
   UINT nBlockSize = 10 
) throw ( );

Parametri

  • nBins
    Il numero di cestini che rappresentano puntatori agli elementi archiviati. Vedere più avanti commenti in questo argomento per una spiegazione di cestini.

  • fOptimalLoad
    Il rapporto ottimale di caricamento.

  • fLoThreshold
    La soglia bassa per il rapporto di caricamento.

  • fHiThreshold
    La soglia superiore del rapporto di caricamento.

  • nBlockSize
    La dimensione di un blocco.

Note

CAtlMap fa riferimento a tutti i relativi elementi archiviati creando innanzitutto un indice utilizzando un algoritmo hash della chiave. Questo indice fa riferimento un "release" che contiene un puntatore agli elementi archiviati. Se il cestino è già utilizzato, un elenco collegato viene creato per accedere agli elementi successivi. Scorrere un elenco è più lento direttamente all'elemento corretto e pertanto la struttura di mapping deve bilanciare i requisiti di memoria rispetto alle prestazioni. Parametri predefiniti sono stati scelti fornire buoni risultati nella maggior parte dei casi.

Il rapporto di carico è il rapporto del numero di cestini al numero di elementi archiviati nell'oggetto mappa. Quando la struttura di mapping viene ricalcolata, il valore del parametro fOptimalLoad verrà utilizzato per calcolare il numero di cestini necessari. Questo valore può essere modificato mediante il metodo CAtlMap::SetOptimalLoad.

Il parametro fLoThreshold è il valore più basso del rapporto di carico può raggiungere prima CAtlMap ricalcolare la dimensione ottimale di mapping.

Il parametro fHiThreshold è il valore superiore del rapporto di carico può raggiungere prima dell'oggetto CAtlMap ricalcolare la dimensione ottimale di mapping.

Questo processo di ricalcolo (noto come rimaneggiare) è abilitato per impostazione predefinita. Se si desidera disabilitare questo processo, forse quando sono disponibili molti dati, chiamare il metodo CAtlMap::DisableAutoRehash. Riattivilo con il metodo CAtlMap::EnableAutoRehash.

Il parametro nBlockSize è una misura la quantità di memoria allocata quando un nuovo elemento è obbligatorio. Le dimensioni maggiori dimensioni di un blocco riducono le chiamate alle routine di allocazione della memoria, ma utilizzano più risorse.

Prima che i dati possano essere archiviati, è necessario inizializzare la tabella hash con una chiamata a CAtlMap::InitHashTable.

Esempio

// Create a map which stores a double
// value using an integer key

CAtlMap<int, double> mySinTable;
int i;

// Initialize the Hash Table
mySinTable.InitHashTable(257);

// Add items to the map
for (i = 0; i < 90; i++)
   mySinTable[i] = sin((double)i);

// Confirm the map is valid
mySinTable.AssertValid();

// Confirm the number of elements in the map
ATLASSERT(mySinTable.GetCount() == 90);

// Remove elements with even key values
for (i = 0; i < 90; i += 2)
   mySinTable.RemoveKey(i);

// Confirm the number of elements in the map
ATLASSERT(mySinTable.GetCount() == 45);

// Walk through all the elements in the map.
// First, get start position.
POSITION pos;
int key;
double value;
pos = mySinTable.GetStartPosition();

// Now iterate the map, element by element
while (pos != NULL) 
{
   key = mySinTable.GetKeyAt(pos);
   value = mySinTable.GetNextValue(pos);
}

Requisiti

Header: atlcoll.h

Vedere anche

CAtlMap Class
CAtlMap::~CAtlMap