CMap,映射表类,也叫字典,一对一。适合用于频繁替换和查找的数据,由Key和Value组成,一般将Key作为唯一变量,通过Key即可找到Value。
CMap利用的是散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。这个映射函数叫做散列函数,存放记录的数组叫做散列表。适用于需要根据关键字进行快速检索的场合。在查找时不用像数组那样遍历index之前的元素,通过哈希表关键字可以快速查找其对应键值。
//头文件
#include <afxtempl.h>
//定义,继承于CObject
//template< class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject
//KEY:Class of the object used as the key to the map.
//ARG_KEY:Data type used for KEY arguments; usually a reference to KEY.
//VALUE:Class of the object stored in the map.
//ARG_VALUE:Data type used for VALUE arguments; usually a reference to VALUE.
CMap<int, int, double, double> MyMap1;
CMap<CString, LPCTSTR, int, int> MyMap2;
//LPCTSTR也就是TCHAR*,也即是char*或者wchar*。
//添加也是设定值
MyMap1.SetAt(1,98.0);
MyMap2.SetAt(_T("张三"),1);
MyMap1[1] = 99.0;
//查找
double dTest = 0;
if (MyMap1.Lookup(1,dTest))
{
AfxMessageBox(_T("找到了"));
//此时dTest的值已经是99.0了
}
//获取个数
int nLength = MyMap2.GetCount();
//遍历
CString strKey = _T("");
int nValue = 0;
POSITION pos = MyMap2.GetStartPosition();
while(pos)
{
MyMap2.GetNextAssoc(pos,strKey,nValue);
}
//删除
MyMap1.RemoveKey(1);
//清空
if(!MyMap1.IsEmpty())//判定是否为空
MyMap1.RemoveAll(); //不会执行,前面已经删掉了
if (!MyMap2.IsEmpty())
MyMap2.RemoveAll();