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