CMap的用法
(2012-03-19 16:03:35)
标签:
it |
分类: MFC |
CMap的使用
参数:
说明:
CMap是把唯一关键码映射到值的字典收集类。一旦在映射中插入了一个关键码值对(元素),就可以使用这些关键码,有效地获取或删除对。同样,也可以反复使用映射中的所有元素。
POSITION类型变量用于替换所有映射变量的入口。可以使用POSITION来“记忆”入口和映射中的遍历。可能认为这种遍历是通过关键码值来依次进行的,但其实不是。获取元素的次序没有确定。
该类的某些成员函数调用了全局的帮助函数,它们必须定制,以满足CMap类的更多用途。请参阅“Microsoft Visual C++ MFC库参考”中的“宏和全局”部分中的“收集类帮助程序”。
CMap引入了宏IMPLEMENT_SERIAL,支持其元素的串行化和转储。如果映射存储到档案文件中,那么每一元素都可利用加载插入(<<)操作符或Serialize成员函数来依次进行串行化。如果要了解有关在映射中进行个别元素的诊断转储,那么转储内容的深度必须为1或更大。当CMap对象删除或其元素被删除,那么关键码和值都将被删除。映射类的派生与列表的派生相似。
为什么使用CMap:
CMap的用法:
头文件:
afxtempl.h
CMap的格式:
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject
Key:用作Key的类型(比如整型、浮点型等)
ARG_KEY:Key的值
VALUE: 用作VALUE的类型
ARG_VALUE:用作VALUE的值
1. 要使用Cmap,那么首先我们要实例化一个CMap的类型
举例:
typedef CMap<int, int, CString,
CString>
typedef CMao<CPoin, CPoin,CTime,
CTime>
typedef CMap<CMyType, CMyType, CThing, CThing> CMyThing; //比如自己的私有物品的列表
任何类型都可以用作key或者value的类型。但是正如我们前面所说,key是一个唯一的标志,用以加快我们的查询速度。
2.我们举例来说明CMap的查询、遍历、删除等用法。
比如一个班级的花名册,那么学生的学号是唯一的,所以我们有了下面这个CMap的实例。
在使用之前声明:
typedef
CMap<int,
使用时,我们认为CMapStu是一个类型就可以了。
CMapStu m_class1; //班级1
3.添加:void SetAt(ARG_KEY key, ARG_VALUE newValue); 此函数会以Key值遍历列表,当查找到key值后使用newValue替换以前的Value值。如果没有找到key值,则添加此项。
4.查找:Lookup(ARG_KEY key, ARG_VALUE& newValue)如果找到Key值,则newValue等于其存储的Value值,返回值为非0。 如果未找到,则返回值为0.
int studentId = 1;
CString studentName;
if (m_class1.Lookup(studentId, studentName))
{
}
5.遍历:CMap提供了专门用作遍历的类型CPair,CPair顾名思义,就是一对。其中包含一个Key和对应的Value。
CMapStu::CPair* pCurValue=
while(pCurVal !=
NULL)
{
}
6.删除一个元素:RemoveKey(ARG_KEY
key)
如果当前Key值存在,则返回非0值,如果不存在,则返回0值。
int studentId = 1;
RemoveKey(1); //删除学号为1的学生信息
7.删除所有元素:RemoveALL()
CMap<int,int,CPoint,CPoint> myMap;
// Add 10 elements to the map.
for (int i=0;i < 10;i++)
myMap.RemoveAll();