VC++ 中CMap的简介和简单实例!
来源:互联网 发布:云计算系统工程师 编辑:程序博客网 时间:2024/06/15 01:00
最近在mfc中用到字典,自己不会在网上查了资料。简单总结一下:
一,CMap是什么?
映射(Map),又称为字典(Dictionary),是由关键字(Key)及其对应的元素值(Value)所组成的元素单
元(Element)的表单式集合。CMap是一个mfc的模板类,可以建立一个从任意类型的变量到另外一个任意类型的
变量的映射(map),用的是哈希表作存储,因此速度较快。对于要求查找速度快一般用数组,对于增加/删除操作
方便的都用链表,但要是两者综合一下,最好还是用合希表。
二,要注意的几个地方:
1.如何声明CMap
许多人对Cmap的声明模式CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>感到迷惑,为什么不用CMap<KEY,VALUE>
呢?实际上,CMap中的的数据最终会是CPair,而CPair内部是(KEY,VALUE)。因此,CMap其实存储的是KEY
,而非ARG_KEY。然而,如果你查看MFC的源代码,几乎CMap所有的内部参数传递都是访问ARG_KEY和ARG_VALUE,因此,使用KEY&来代替ARG_KEY似乎是正确的,除了在这些情况下:
1 应用简单的数据类型,如int ,char用值传递与参数传递没有什么不同
2 如果用CString作为KEY,你应该用LPCTSTR做ARG_KEY而非CString&。
2.有哪些与Map相关的典型操:
1 向Map中插入具有给定关键字的元素单元。
2 在Map中查找具有给定关键字的元素单元。
3 在Map中删除具有给定关键字的元素单元。
4 枚举(遍历)Map中的所有元素单元。
三,简单的例子:
例子一: 我们来看一个CMap的用法,下面示例代码:
CMap<int,int&,CPoint,CPoint&> myMap;
//初始化哈希表,并指定其大小(取奇数)。MyMap.InitHashTable(257);
//向myMap中添加元素单元。
for (int i=0;i < 200;i++)
myMap.SetAt( i, CPoint(i, i) );
// 删除实际值为偶数的关键字所对应的的元素单元。
POSITION pos = myMap.GetStartPosition();
int nKey;
CPoint pt;
while (pos != NULL)
{
myMap.GetNextAssoc( pos, nKey, pt );
if ((nKey%2) == 0)
myMap.RemoveKey( nKey );
}
#ifdef _DEBUG
afxDump.SetDepth( 1 );
afxDump << "myMap: " << &myMap << "/n";CMap<int,int&,CPoint,CPoint&> myMap;
//初始化哈希表,并指定其大小(取奇数)。MyMap.InitHashTable(257);
//向myMap中添加元素单元。
for (int i=0;i < 200;i++)
myMap.SetAt( i, CPoint(i, i) );
// 删除实际值为偶数的关键字所对应的的元素单元。
POSITION pos = myMap.GetStartPosition();
int nKey;
CPoint pt;
while (pos != NULL)
{
myMap.GetNextAssoc( pos, nKey, pt );
if ((nKey%2) == 0)
myMap.RemoveKey( nKey );
}
#ifdef _DEBUG
afxDump.SetDepth( 1 );
afxDump << "myMap: " << &myMap << "/n";
CMap是个很不错的数据结构,尤其在你建立一个字典的时候。比如idcountry的含义是"中国",这就是一个元组
,也就是一个Pair,Key是"idcountry",而Value是"中国"。
例子二:
1、定义一个CMAP,向这个CMAP中增加数据项(键-值对)。
CMap<CString, LPCTSTR, CString, LPCTSTR>m_ItemMap;
CString strKey = _T(""), str = _T("");
int i;
for(i = 0; i < 5; i++)
{
strKey.Format("%d", i); //这个是键
str.Format("A%d", i); //键对应的值
m_ItemMap.SetAt(strKey, str);
}
2、遍历正个CMAP的常用方法。
POSITION pos = m_ItemMap.GetStartPosition();
while(pos)
{
m_ItemMap.GetNextAssoc(pos, strKey, str);
cout<< strKey<< ":"<< str<< endl;
}
3、在CMAP中查找相应的数据项。
CString pReset;
if(m_ItemMap.Lookup("1", pReset))
{
cout<<pReset<<endl;
}
转帖:http://blog.csdn.net/wjhuangjin/article/details/4823661
- VC++ 中CMap的简介和简单实例!
- VC++ 中CMap的简介和简单实例!
- VC++ 中CMap的简介和简单实例!
- VC++中CMAP的使用
- VC++中CMAP的使用
- VC++中CMAP的使用
- VC++中CMAP用法
- VC++中CMAP用法
- 关于VC++中CMAP用法
- CMap的成员函数SetAt和Lookup用法实例
- VC的CMap类和STL的map的使用及使用过程中遇到的错误
- VC的CMap类和STL的map的使用及使用过程中遇到的错误
- 简单标签的简介和实例运用
- 简单标签的简介和实例运用
- vc++中Dao数据库的简单应用实例
- VC中利用ADO访问数据库的一个简单实例
- VC++在结构体中加入CArray类型,CMap
- MFC中CMap类的应用
- 游戏开发中SurfaceView的重要作用
- oracle数据库学习
- unity 脚本 function 生命周期 MonoBehaviour Mono行为
- 关于arm-linux驱动开发设计推荐博文
- apache日志分析常用命令
- VC++ 中CMap的简介和简单实例!
- java中统计字符串出现次数
- Android开发之清除程序缓存
- ArcGIS for Android示例解析之空间查询-----QueryTask
- 2011年中国程序员薪水调查报告
- java上下文绝对路径
- APK权限大全
- 为什么项目经理拿的钱比程序员多?
- JAVA模板引擎FreeMarker