MFC CMap整理
映射表类(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。
//
CMap CMapStringToOb具体应用
映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”,就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。举个例子来说吧,公司的所有职员都有一个工号和自己的姓名,工号就是姓名的关键字,给出一个工号,就可以很快的找到相应的姓名。映射类最适用于需要根据关键字进行快速检索的场合。
CMapWordToPtr 保存void指针,关键字为WORD
CMapPtrToWord 保存WORD,关键字为void指针
CMapPtrToPtr 保存void指针,关键字为其它void指针
CMapWordToOb 保存CObject指针,关键字为WORD
CMapStringToOb 保存CObject指针,关键字为字符串
CMapStringToPtr 保存void指针,关键字为字符串
CMapStringToString 保存字符串,关键字为字符串
声明:CMap<SOCKET, SOCKET, char*, char*> m_SockToUserIDMap;
CMap<char*, char*, SOCKET, SOCKET> m_UserIDToSockMap;
赋值:m_SockToUserIDMap[pUserInfo->sSocket] = pszUserID;
m_UserIDToSockMap[pszUserID] = pUserInfo->sSocket;
取值:char *pszUserID = m_SockToUserIDMap[sSock];
SOCKET sSock = m_UserIDToSockMap[pszUserID];
此处略去CMyData的代码。
以下演示CMap的基本用法,其它的也都差不多的用法,只是其中元素变一变。
//定义类型
typedef CTypedPtrMap<CMapStringToOb,CString,CMyData*> CMapDataMap;
//定义实例
CMapDataMap m_map;
//添加
CMyData *pData=new CMyData;
m_map.SetAt("abc", pData); //abc对应pData
//再使用abc查找刚才放进去的CMyData
CMyData *pResult=NULL;
if(m_map.Lookup ("abc", pResult))
{
//找到了...
}
//删除
CMyData *pResult=NULL;
if(m_map.Lookup("abc", pResult))
{
m_map.RemoveKey("abc");
delete pResult;pResult=NULL;
}
//删除CMap中所有项
POSITION pos=map.GetStartPosition();
CString szKey="";
CMyData *pData=NULL;
while(pos!=NULL)
{
m_map.GetNextAssoc(pos, szKey, pData);
delete pData;pData=NULL;
}
m_map.RemoveAll();
Map通常是为了查找才使用的,比如你有一个链表List, 其中记录了10000个对象,每个对象都有一个不同的ID.这时,你要查找指定ID的对象,如果使用List,则你必须遍历整个List,看看那个对象的ID相同.随着对象数目的增加,此操作效率将非常低.因此,最后建立一个Map,并进行维护.
CMap<int, int, CMyObject*, CMyObject*>MyIDMap;
此时, 你用CMap::Lockup函数就可以很快的找到你要的对象.
MFC CMap整理相关推荐
- std::map用法
std::map用法 STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用. 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map ...
- STL之Map和MFC之CMap比较学习
在MFC中,有CMap相关的map类, 在 map中有map. // Maps (aka Dictionaries) class CMapWordToOb; // map f ...
- MFC CFileDialog使用整理
MFC CFileDialog使用整理 1.CFileDialog构造函数 CFileDialog:CFileDialog(BOOL bOpenFileDialog, LPCTSTR ...
- Cmap和Carray以及Cstring的使用以及MFC中的文件读写
参考资料:百度文库http://wenku.baidu.com/view/ddd1b32558fb770bf78a55a5.html?from=search http://wenku.baidu.co ...
- Visual C++程序设计——MFC整理笔记
In me the tiger sniffs the rose." 心有猛虎,细嗅蔷薇. 人心拥有猛虎和蔷薇的两面体,若缺少了蔷薇就难免变得莽撞,从而流入庸俗:若缺少了猛虎就难免变得懦弱, ...
- 【转】MFC消息映射详解(整理转载)
消息:主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息.例如,单击鼠标左按钮,windows将产WM_LBUTTONDOWN消息,而释放鼠标左按钮将产生WM_LBUTTONUP消息 ...
- MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)
2019独角兽企业重金招聘Python工程师标准>>> 一:在VB中调用X控件,添加方法 project->Add components.另外可以用Object Browser ...
- mfc 判断文件夹复制完成_Python办公自动化|自动整理文件,一键完成!
本文跟大家分享一个文件整理脚本的实现过程.具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的所有文件都揪出来,并且根据后缀名归类到不同的文件夹里,就像下图一样,简直是整理爱好者的 ...
- VC的MFC中重绘函数的使用总结(整理)
原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重绘 In ...
最新文章
- 分享8个非常实用但是名气不大的软件
- linux下挂载windows目录
- Python Elasticsearch 插入数据
- Android中asset文件夹和raw文件夹区别
- sam服务器是什么_使用SAM CLI将机器学习模型部署到无服务器后端
- Windows Embedded CE 6.0开发初体验(三)设置Boot-loader
- 两个mapreduce 做topn_Apache Hive 是怎样做基于代价的优化的?
- mongodb数据库扩展名_MongoDB 数据库引用
- mysql的多媒体类型_多媒体数据库技术及其发展方向
- 2020最新版《神经网络与深度学习》中文版更新完毕,pdf开放下载
- linux 建立ssh隧道,在Linux、Windows、macOS上创建SSH隧道并通过SSH隧道连接到MySQL
- msvcp71.dll、msvcr71.dll丢失解决方法
- 朱乐睿_校友风采_师范大学企业管理专业
- lumion建筑可视化2.5小时的真实感渲染教程
- wex5 导入mysql_Wex5铛铛开发环境搭建步骤
- 生于忧患,死于安乐。
- postgresql -- 绑定变量窥视规则
- 湖南生物机电职院信息技术学院召开第一届思政工作会议
- 集合类 Java中的集合类解析和一些有深入的面试题
- 建木(Jianmu)----迈出建木第一步创建项目分组