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 通过首先创建索引引用其所有存储元素。该索引引用包含指向存储元素的“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

请参见

参考

CAtlMap选件类

CAtlMap::~CAtlMap