MFC CMap整理

来源:互联网 发布:小号软件 编辑:程序博客网 时间:2024/06/04 00:29
映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”。CMap是把唯一关键码映射到值的字典收集类,使用CMap可以构造一个关键字和元素值映射的集合类。一旦在映射中插入了一个关键码值对(元素),就可以使用这些关键码,有效地获取或者删除对元素。同样,也可以反复使用映射中的所有元素。 就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。映射类最适用于需要根据关键字进行快速检索的场合。在查找时不用像数组那样遍历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

 

http://blog.csdn.net/kerryxue/article/details/5997846