CAtlMap::CAtlMap
更新 : 2007 年 11 月
コンストラクタです。
CAtlMap(
UINT nBins = 17,
float fOptimalLoad = 0.75f,
float fLoThreshold = 0.25f,
float fHiThreshold = 2.25f,
UINT nBlockSize = 10
) throw ( );
パラメータ
nBins
格納されている要素へのポインタを持つビンの数。ビンの説明については、このトピックの「解説」を参照してください。fOptimalLoad
最適な読み込み比率。fLoThreshold
読み込み比率の最小しきい値。fHiThreshold
読み込み比率の最大しきい値。nBlockSize
ブロック サイズ。
解説
CAtlMap は、最初にハッシュ アルゴリズムを使用してキーに対してインデックスを作成することによって、格納されているすべての要素を参照します。このインデックスは、格納されている要素へのポインタが含まれている "ビン" を参照します。ビンが使用中の場合は、リンク リストを作成して後続の要素にアクセスします。リストの走査は、目的の要素への直接アクセスに比べると低速であるため、マップ構造体では、パフォーマンスとストレージ要件のバランスを考慮する必要があります。多くの場合は、既定のパラメータを選択すると、適切な結果を得ることができます。
読み込み比率とは、マップ オブジェクトに格納されている要素数に対するビン数の比率です。パラメータ 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);
}
必要条件
ヘッダー : atlcoll.h