就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。映射类最适用于需要根据关键字进行快速检索的场合。在查找时不用像数组那样遍历index之前的元素,通过哈希表关键字可以快速查找其对应键值。

     #include <afxtempl.h>

     CMap类的成员:

     构造函数:CMap

     操作:

     Lookup:查找与指定关键码对应的值

     SetAt:在映射中插入一个元素,如果发现相匹配的关键码,则替换已经存在的元素

     Operator[]:在映射中插入一个元素,它是代替SetAt的操作符

     RemoveKey:删除关键码指定的元素

     RemoveAll:删除映射中所有的元素

     GetStartPosition:返回第一个元素的位置

     GetNextAssoc:获取循环中的下一个元素

     GetHashTableSize:获取散列表的大小(元素的个数)

     InitHashTable:初始化散列表,并指定其大小

     状态:

     GetCount:返回Map中元素的数目

     IsEmpty:检查Map是否为空(即字典中无元素单元)

 

举例如下:

1.定义一个CMap,向这个CMap中增加数据项(键-值对)

CMap<CString,LPCTSTR,CString,LPCTSTR>my_Map;
CString strKey = _T(""),strValue = _T("");
 
int i;
for(i=0;i<5;i++)
{
    strKey.Format("%d",i);
    strValue.Format("V%d",i);
    my_Map.SetAt(strKey,strValue);
}

 

2.遍历整个CMap的常用方法

POSITION pos = myMap.GetStartPosition();
while(pos)
{
    myMap.GetNextAssoc(pos,strKey,strValue);
    cout<<strKey<<":"<<strValue<<endl;
}

 

3.在CMap中查找相对应的数据项(举例查找关键字"1"对应的键值)

CString pLook;
if(myMap.Lookup("1",pLook))
{
    cout<<pLook<<endl;
}

 

PS:可能有人会对CMap的声明模式CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>觉得有些不容易理解,有点迷惑,觉得CMap的声明为什么不是CMap<Key,Value>呢?实际上,CMap中的数据最终会是CPair,而CPair即为(KEY,VALUE),因此,CMap其实存储的是KEY,而不是ARG_KEY