Freigeben über


CAtlMap::CAtlMap

Der -Konstruktor.

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

Parameter

  • nBins
    Die Anzahl von Containern, die Zeiger auf gespeicherten Elemente bereitstellen. Siehe Hinweise weiter unten in diesem Thema für eine Erläuterung von Containern.

  • fOptimalLoad
    Das optimale Last-Verhältnis.

  • fLoThreshold
    Der untere Schwellenwert für das Last-Verhältnis.

  • fHiThreshold
    Im oberen Schwellenwert für das Last-Verhältnis.

  • nBlockSize
    Die Blockgröße.

Hinweise

CAtlMap verweist alle gespeicherten Elemente, indem zuerst einen Index mithilfe eines Hashalgorithmus auf den Schlüssel erstellt. Dieser Index verweist auf einen "bin" der einen Zeiger auf den gespeicherten Elemente enthält. Wenn der Container bereits verwendet wird, wird eine verknüpfte Liste erstellt, um auf die folgenden Elemente zuzugreifen. Eine Liste durchlaufen ist langsamer als auf das richtige Element direkt, Dateizugriff und muss deshalb die Zuordnungsstruktur Speicherbeanspruchung und Leistung abwägen. Die Standardparameter ausgewählt wurden, die gute Ergebnisse in den meisten Fällen zu geben.

Das Last-Verhältnis ist das Verhältnis der Anzahl von Containern zur Anzahl von Elementen, die im Zuordnungsobjekt gespeichert werden. Wenn die Zuordnungsstruktur neu berechnet wird, wird der fOptimalLoad -Parameterwert verwendet, um die Anzahl der erforderlichen Containern zu berechnen. Dieser Wert kann mit der Methode CAtlMap::SetOptimalLoad geändert werden.

Der fLoThreshold-Parameter ist der niedrigere Wert, den das Last-Verhältnis erreichen kann, bevor CAtlMap die optimale Größe der Zuordnung neu berechnet.

Der fHiThreshold-Parameter ist der obere Wert, den das Last-Verhältnis erreichen kann, bevor das Objekt CAtlMap die optimale Größe der Zuordnung neu berechnet.

Dieser Neuberechnungsprozess (bekannt als Durchführen eines Rehash) ist standardmäßig aktiviert. Wenn Sie diesen Prozess deaktivieren möchten, werden, wenn Sie gleichzeitig viele Daten eingeben, rufen Sie die CAtlMap::DisableAutoRehash-Methode auf. Reaktivieren Sie es mit der CAtlMap::EnableAutoRehash-Methode.

Der Parameter ist nBlockSize Measure des Speichers, der zugeordnet wird, wenn ein neues Element erforderlich ist. Größere Blockgrößen reduzieren Aufrufe der Speicherbelegungsroutinen, verwenden jedoch mehr Ressourcen.

Bevor alle Daten gespeichert werden können, ist es notwendig, die Hashtabelle mit einem Aufruf von CAtlMap::InitHashTable zu initialisieren.

Beispiel

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

Anforderungen

Header: atlcoll.h

Siehe auch

Referenz

CAtlMap Class

CAtlMap::~CAtlMap