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 |