CAtlMap::CAtlMap
コンストラクターです。
CAtlMap(
UINT nBins = 17,
float fOptimalLoad = 0.75f,
float fLoThreshold = 0.25f,
float fHiThreshold = 2.25f,
UINT nBlockSize = 10
) throw ( );
パラメーター
nBins
格納されている要素へのポインターを提供する bin の数。Bin の詳細については、このトピックの"解説を参照してください。fOptimalLoad
最適な負荷の割合。fLoThreshold
負荷の比率の下部のしきい値。fHiThreshold
負荷の比率の上限のしきい値。nBlockSize
ブロック サイズ。
解説
CAtlMap は、キーのハッシュ アルゴリズムを使用してインデックスを作成することによって格納されているすべての要素を参照します。このインデックスは、格納されている要素へのポインターを含む「bin」を参照します。Bin フォルダー内に既に使用されていた場合、その後に続く要素にアクセスするには、リンク リストが作成されます。リストを走査することは直接正しい要素にアクセス速度が低下するため、マップ構造がパフォーマンスに対するメモリ要件を分散させる必要があります。既定のパラメーターは、ほとんどの場合、正しい結果を得るために選択されています。
負荷の比率には、マップ オブジェクトに格納されている要素の数への Bin 数の割合を占めています。マップ構造が再計算する場合、Bin の数を計算するために、fOptimalLoad の パラメーターの値が使用されます。この値は CAtlMap::SetOptimalLoad のメソッドを使用して変更できます。
fLoThreshold のパラメーターは CAtlMap がマップの最適なサイズを再計算する前に到達する負荷の比率ができる下限値です。
fHiThreshold のパラメーターは CAtlMap のオブジェクトがマップの最適なサイズを再計算する前に到達する負荷の比率ができる上限値です。
この再計算のプロセス (再作成すると呼ばれます) 既定で有効になっています。このプロセスを無効にする場合は、多くのデータをまとめて入力した場合、CAtlMap::DisableAutoRehash のメソッドを呼び出します。CAtlMap::EnableAutoRehash のメソッドを使用してこれを再アクティブ化します。
nBlockSize のパラメーターは、新しい要素が要求されたときに割り当てられたメモリの総量の単位です。大きなブロック サイズはメモリ割り当てルーチンの呼び出しが低くなりますが、より多くのリソースを使用します。
すべてのデータが格納する前に CAtlMap::InitHashTableを呼び出して、ハッシュ テーブルを初期化する必要があります。
使用例
// 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);
}
必要条件
Header: atlcoll.h