浅谈 CMap 与 map

本文探讨了MFC中的映射表类如CMapStringToString与STL标准库中的map之间的区别与联系。介绍了MFC映射表类的具体应用场景,并与STL中的map进行了比较,指出后者在遍历等方面的简洁性和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说白了是MFC与STL标准库的函数

CMapStringToString  映射表字符对字符
CObject   MFC的大多数基类,很常见很基础的 一个类。
CObList   就是存储CObject的列表
CMapStringToOb   通过字符对CObList/CObject
                               这个用起来就有点意思了,可以建立一个基于CObject的类(不基于的话也行),CObList把这些类串起来(不基于的话这里需要强转),然后还可以CMapStringToOb来映射管理。说起来很简单,但是实际使用的话很强大,可以解决很多复杂的逻辑关系或者数据关系。
当然CMap<Key,ARG_Key,Values,ARG_Values> 更加强大,不仅是字符与CObject类,所有类型均可了。


map<key, Values> 虽然作为STL的函数,功能上感觉也差不多,map也好 vector也好,均能够存储一般数据类型、数据结构体、类的指针。


以下摘自: http://blog.sina.com.cn/s/blog_4b559bf30100gta6.html

在MFC中,有CMap相关的map类, 在 map中有map。

// Maps (aka Dictionaries)
class CMapWordToOb;         // map from WORD to CObject*
class CMapWordToPtr;        // map from WORD to void*
class CMapPtrToWord;        // map from void* to WORD
class CMapPtrToPtr;         // map from void* to void*

// Special String variants
class CMapStringToPtr;      // map from CString to void*
class CMapStringToOb;       // map from CString to CObject*
class CMapStringToString;   // map from CString to CString

 

对于以上可以直接用stl中的一个map类型全部概况。

map<Word, CObject*>

map<Word, void*>

map<void*, Word>

map<void*, void*>

map<CString,void*>

map<CString, CObject*>

map<CString, CString>

由此,还是map简练。

再看遍历时,各个处理如下:

CMap<DWORD, DWORD&, ThreadInfo, ThreadInfo&> m_threadMap;   //定义一组线程map

则在

ThreadInfo info;

DWORD Key ;
POSITION pos = threadMap.GetStartPosition();
while (pos != NULL)
{

    threadMap.GetNextAssoc(pos, Key, info);
    {
     。。。
    }
}

如果采用std中的map处理则

map<DWORD ,ThreadInfo>m_threadMap;

map<DWORD ,ThreadInfo>::iteraotr pIt;

for(pIt = m_threadMap.begin(); pIt != m_threadMap.end(); pIt++){

     ......

}

简单明了,胜过用mfc中繁芜而又不清晰的过程。所以多用std做程序开发比用一些过时的要好得多。

何须浪费时间去知道几个茴字的写法呢。是不是。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值