次の方法で共有


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

参照

参照

CAtlMap クラス

CAtlMap::~CAtlMap

その他の技術情報

CAtlMap のメンバ