MFC - CMap

映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”。 类似于c++ STL map或hashmap

#include <afxtempl.h>

构造

CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>

操作:

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

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

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

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

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

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

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

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

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

状态:

GetCount:返回Map中元素的数目

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

 

示例:

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

CMap<CString,LPCTSTR,CString,LPCTSTR> Map;

CString strKey = _T(""),strValue = _T("");

int i;

for(i=0;i<5;i++){

    strKey.Format("%d",i);

    strValue.Format("V%d",i);

    Map.SetAt(strKey,strValue);

}

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

POSITION pos = Map.GetStartPosition();

while(pos){

    Map.GetNextAssoc(pos,strKey,strValue);

    cout<<strKey<<":"<<strValue<<endl;

}

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

CString pLook;

if(Map.Lookup("1",pLook)){

    cout<<pLook<<endl;

}

备注: CMap的声明模式CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> 很难理解,为什么不像c++ STL的声明直接是CMap<Key,Value>?实际上,CMap中数据最终会是CPair,而CPair即为(KEY,VALUE),因此,CMap其实存储的是KEY,而不是ARG_KEY

posted @ 2019-03-25 16:45  Reboost  阅读(1382)  评论(0编辑  收藏  举报