CAtlMap::CAtlMap
コンストラクターです。
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