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