回 帖 发 新 帖 刷新版面

主题:[讨论]有关CMaps类的问题

谁能帮我详解一下CMap类是用来作什么的?
    
还有CMapPtrToPtr,CMapStringToString,CMapPtrToWord ,CMapStringToObMapStringToPtr,CMapWordToOb,CMapWordToPtr它们是用来干什么的?
    
谢各位了!

回复列表 (共5个回复)

沙发

template <class KEY,class ARG_KEY,class VALUE, class ARG_VALUE> class CMap:public CObject

参数: KEY 对象的类,用作映射的关键码。  
ARG_KEY 参数KEY使用的数据类型,通常为KEY的参考。  
VALUE 存储在映射中对象的类。  
ARG_VALUE 参数VALUE使用的数据类型,通常为VALUE的参考。  

说明:
CMap是把唯一关键码映射到值的字典收集类。一旦在映射中插入了一个关键码值对(元素),就可以使用这些关键码,有效地获取或删除对。同样,也可以反复使用映射中的所有元素。
POSITION类型变量用于替换所有映射变量的入口。可以使用POSITION来“记忆”入口和映射中的遍历。可能认为这种遍历是通过关键码值来依次进行的,但其实不是。获取元素的次序没有确定。
该类的某些成员函数调用了全局的帮助函数,它们必须定制,以满足CMap类的更多用途。请参阅“Microsoft Visual C++ MFC库参考”中的“宏和全局”部分中的“收集类帮助程序”。
CMap引入了宏IMPLEMENT_SERIAL,支持其元素的串行化和转储。如果映射存储到档案文件中,那么每一元素都可利用加载插入(<<)操作符或Serialize成员函数来依次进行串行化。如果要了解有关在映射中进行个别元素的诊断转储,那么转储内容的深度必须为1或更大。当CMap对象删除或其元素被删除,那么关键码和值都将被删除。映射类的派生与列表的派生相似。请参阅联机文档“Visual C++程序员指南”中的“收集”部分,以进一步了解特殊用途的列表类的派生。
#include <afxtempl.h>

板凳

CMapPtrToPtr类支持空指针为关键码的空指针映射。
CMapPtrToPtr的成员函数与CMapStringToOb类的成员函数相似。由于这种相似性,因此可以为指定的成员函数使用CMapStringToOb参考。不管是否将CObject指针看作函数参数,还是返回值,它都会将指针替换为空值。另外,不管是否将一个指向字符的CString指针或常数指针看作函数参数,还是返回值,它都会将指针替换为空值。
BOOL CMapStringToOb::Lookup( const char* <key>, CObject*& <rValue> ) const;
例如, 它可以转换为:
BOOL CMapPtrToPtr::Lookup( void* <key>, void*& <rValue> ) const;
CMapPtrToPtr 引入了宏IMPLEMENT_DYNAMIC来支持运行状态类型的访问,并将其转储为CDumpContext对象。如果需要实现个别映射元素(指针值)的转储,那么必须将转储文本的深度设置为1或更大。指针对指针的映射不可串行化。
当CMapPtrToPtr对象或其元素被删除,那么仅仅是其指针被删除,而它们参考的入口不会被删除。
如果要了解有关CMapPtrToPtr的更多信息,请参阅联机文档“Visual C++程序员指南”中的“收集”。
#include <afxcoll.h>

3 楼

CMapPtrToWord类支持空指针为关键码的16位字的映射。
CMapPtrToWord的成员函数与CMapStringToOb类的成员函数相似。由于这种相似性,因此可以为指定的成员函数使用CMapStringToOb参考。不管是否将CObject指针看作函数参数,还是返回值,它都会将其替换为WORD。另外,不管是否将一个指向字符的CString指针或常数指针看作函数参数,还是返回值,它都会将指针替换为空值。
BOOL CMapStringToOb::Lookup( const char* <key>, CObject*& <rValue> ) const;
例如,它可以转换为:
BOOL CMapPtrToWord::Lookup( const void* <key>, WORD& <rValue> ) const;
CMapWordToPtr引入了宏IMPLEMENT_DYNAMIC来支持运行状态类型的访问,并将其转储为CDumpContext对象。如果需要实现个别映射元素(指针值)的转储,那么必须将转储文本的深度设置为1或更大。指针对字的映射不可串行化。
当CMapPtrToWord对象或其元素被删除,那么仅仅是其指针及对应的字被删除,而关键指针参考的入口不会被删除。
如果要了解有关CMapPtrToWord的更多信息,请参阅联机文档“Visual C++程序员指南”中的“收集”。
#include <afxcoll.h>

4 楼

CMapStringToOb是将唯一的CString对象映射为CObject指针的一个字典类。一旦在映射中插入一个CString-CObject* 对或元素,那么可以有效地获取或删除使用字符串或CString值作为关键码的对。同时,也可以在映射中遍历所有元素。
POSITION类型变量用于替换所有映射变量的入口。可以使用POSITION来“记忆”入口后遍历映射。可能认为这种遍历是通过关键码值来依次进行的,但实际不是。
获取元素的次序没有确定。CMapStringToOb引入了宏IMPLEMENT_SERIAL,来支持其元素的串行化和转储。如果映射存储到档案文件中,那么每一元素都可利用加载插入(<<)操作符或Serialize成员函数来依次进行串行化。
如果要了解有关在映射中进行个别元素的诊断转储(CString值或CObject内容),那么转储内容的深度必须为1或更大。
当CMapStringToOb对象或其元素被删除,那么CString值或CObject指针将被删除,而CObject指针参考的对象则不会被销毁。
映射类的派生与列表的派生相似。请参阅联机文档“Visual C++程序员指南”中的“收集”部分,以进一步了解指定用途的列表类的派生。
下列是同CMapStringToOb类成员函数较相似类: · CMapPtrToPtr  
· CMapPtrToWord  
· CMapStringToPtr  
· CMapStringToString  
· CMapWordToOb  
· CMapWordToPtr  

#include <afxcoll.h>

这些都类似!!!

5 楼

可以参考下数据结构里面的hash table结合MFC里面的CList或者CArray就会明白了

我来回复

您尚未登录,请登录后再回复。点此登录或注册