CArray和CMap使用
来源:互联网 发布:淘宝怎样不被厂家投诉 编辑:程序博客网 时间:2024/05/16 09:54
在C++数据结构中,经常会使用到CArray串和CMap映射,本文重点介绍其使用方法和相互之间的转换。
1.CArray使用
//数据结构定义struct tMY_CAN_SIG{CStringsSigName;CStringsSigDes;tMY_CAN_SIG(){sSigName=_T("");sSigDes=_T("");}tMY_CAN_SIG& operator = (tMY_CAN_SIG& item){sSigName=item.sSigName;sSigDes=item.sSigDes;return *this;}};typedef CArray<tMY_CAN_SIG, tMY_CAN_SIG&> CMyCanSigArray;struct tMY_CAN_MSG{DWORDdwMsgID;CStringsMsgName;CStringsMsgDes;CMyCanSigArrayarrSignal;tMY_CAN_MSG(){dwMsgID=0;sMsgName=_T("");sMsgDes=_T("");arrSignal.RemoveAll();}tMY_CAN_MSG& operator = (tMY_CAN_MSG& item){dwMsgID=item.dwMsgID;sMsgName=item.sMsgName;sMsgDes=item.sMsgDes;arrSignal.RemoveAll();int cnt = item.arrSignal.GetSize();for (int i=0; i<cnt; i++){arrSignal.Add(item.arrSignal[i]);}return *this;}};typedef CArray<tMY_CAN_MSG, tMY_CAN_MSG&> CMyCanMsgArray;//数据使用CMyCanMsgArraym_arrMyCanMsg;//循环int cnt = m_arrMyCanMsg.GetSize();for (int i=0; i<cnt; i++){int jcnt = m_arrMyCanMsg[i].arrSignal.GetSize();for (int j=0; j<jcnt; j++){m_arrMyCanMsg[i].arrSignal[j].sSigName;}}
2.CMap使用
//数据结构定义struct tMY_CAN_SIG_MAP{UCHAR ucSigEditID;tMY_CAN_SIG DbSig;tMY_CAN_SIG_MAP(){ucSigEditID=0;}tMY_CAN_SIG_MAP& operator = (tMY_CAN_SIG_MAP& item){ucSigEditID = item.ucSigEditID;DbSig = item.DbSig;return *this;}};struct tMY_CAN_MSG_MAP{WORD wMsgEditID;DWORDdwMsgID;CStringsMsgName;CStringsMsgDes;CMap<UCHAR, UCHAR&, tMY_CAN_MSG_MAP, tMY_CAN_MSG_MAP&> mapSig;tMY_CAN_MSG_MAP(){wMsgEditID = 0;dwMsgID=0;sMsgName=_T("");sMsgDes=_T("");mapSig.RemoveAll();}tMY_CAN_MSG_MAP& operator = (tMY_CAN_MSG_MAP& item){wMsgEditID = item.wMsgEditID;dwMsgID=item.dwMsgID;sMsgName=item.sMsgName;sMsgDes=item.sMsgDes;mapSig.RemoveAll();POSITION pos = item.mapSig.GetStartPosition();UCHAR ucSigEditID = 0;tMY_CAN_SIG_MAP mapDbSig;while(pos){item.mapSig.GetNextAssoc(pos,ucSigEditID,mapDbSig);mapSig.SetAt(ucSigEditID,mapDbSig);}return *this;}};//数据使用CMap<WORD, WORD&, tMY_CAN_MSG_MAP, tMY_CAN_MSG_MAP&> m_MyCanMsgMap;//循环WORD wMsgEditID = 0;UCHAR ucSigEditID = 0;tMY_CAN_MSG_MAP mapmsg;tMY_CAN_SIG_MAP mapsig;POSITION pos = m_MyCanMsgMap.GetStartPosition();while(pos){m_MyCanMsgMap.GetNextAssoc(pos,wMsgEditID,mapmsg);POSITION pos1 = mapmsg.mapSig.GetStartPosition();while(pos1){mapmsg.mapSig.GetNextAssoc(pos1,ucSigEditID,mapsig);mapsig.DbSig.sSigName;}}//查找if (m_MyCanMsgMap.Lookup(wMsgEditID,mapmsg)){if (mapmsg.mapSig.Lookup(ucSigEditID,mapsig)){m_MyCanMsgMap[wMsgEditID].mapSig[ucSigEditID];}}
3.相互转换
//CMap和CArray数据转换void ArrayToMap(){m_MyCanMsgMap.RemoveAll();tMY_CAN_MSG_MAP msgmap;tMY_CAN_SIG_MAP sigmap;int cnt = m_arrMyCanMsg.GetSize();for (int i=0; i<cnt; i++){msgmap.wMsgEditID = WORD(i);msgmap.dwMsgID=m_arrMyCanMsg[i].dwMsgID;msgmap.sMsgName=m_arrMyCanMsg[i].sMsgName;msgmap.sMsgDes=m_arrMyCanMsg[i].sMsgDes;msgmap.mapSig.RemoveAll();int jcnt = m_arrMyCanMsg[i].arrSignal.GetSize();for (int j=0; j<jcnt; j++){sigmap.ucSigEditID = UCHAR(j);sigmap.DbSig = m_arrMyCanMsg[i].arrSignal[j];msgmap.mapSig.SetAt(sigmap.ucSigEditID,sigmap);}m_MyCanMsgMap.SetAt(msgmap.wMsgEditID,msgmap);}}void MapToArray(){m_arrMyCanMsg.RemoveAll();tMY_CAN_MSG msg;tMY_CAN_SIG sig;POSITION pos = m_MyCanMsgMap.GetStartPosition();WORD wMsgEditID = 0;tMY_CAN_MSG_MAP mapDbMsg;while(pos){m_MyCanMsgMap.GetNextAssoc(pos,wMsgEditID,mapDbMsg);msg.dwMsgID = mapDbMsg.dwMsgID;msg.sMsgName = mapDbMsg.sMsgName;msg.sMsgDes = mapDbMsg.sMsgDes;msg.arrSignal.RemoveAll();POSITION pos1 = mapDbMsg.mapSig.GetStartPosition();UCHAR ucSigEditID = 0;tMY_CAN_SIG_MAP mapDbSig;while(pos1){mapDbMsg.mapSig.GetNextAssoc(pos1,ucSigEditID,mapDbSig);sig = mapDbSig.DbSig;msg.arrSignal.Add(sig);}m_arrMyCanMsg.Add(msg);}}
0 0
- CArray和CMap使用
- Cmap和Carray以及Cstring的使用以及MFC中的文件读写
- CArray, CList, CMap
- CArray,CMap,CList详解
- CArray,CMap,CList 速度比较
- 十:CArray,CMap,CList详解
- CArray,CMap,CList 速度比较
- CArray,CMap,CList 速度比较
- 对比CMap和Map使用
- CArray,CList,CMap如何实化
- CMap使用
- CMap使用
- CArray和CTypedPtrList的使用初步
- CArray,CList,CMap如何实化(实例化,instantiation)
- CArray,CList,CMap如何实化(实例化,instantiation)
- CArray,CList,CMap如何实化(实例化,instantiation)
- VC++在结构体中加入CArray类型,CMap
- CMap 使用注意说明
- 2016中兴校园招聘面试经验
- mysql索引
- Markdown语法示例
- 【Android】Android2.3版本以上谷歌为何推荐使用HttpURLConnection却弃用 Apache HttpClient
- 第十三周项目3-Dijkstra算法的验证
- CArray和CMap使用
- iOS实战开发常见问题(一)
- SQL lpad()函数
- Wpf Border圆角
- Python---pandas包
- jQuery.dataTables 中文乱序 (后台是有序) 自定义排序
- 小波变换
- 第9周项目2-(1)对称矩阵压缩存储的实现与应用
- IntelliJ IDEA---常用设置讲解(gif版)