multimap <string, struct>使用范例

来源:互联网 发布:windows同步时间超时 编辑:程序博客网 时间:2024/05/20 18:55
 

头文件:#include <map>

声明和定义相关:

typedef struct tag_ALARM_INFO
    {
        __UINT32 dwAlarmSeq;      //流水号
        __UINT32 dwCreatedTime;   //创建的时间
    }ALARM_INFO;

 

typedef multimap < CString,ALARM_INFO > Alarm_mutimap;
typedef multimap < CString,ALARM_INFO >::iterator Alarm_mutimap_it;
typedef multimap < CString,ALARM_INFO >::size_type Alarm_mutimap_sz;

Alarm_mutimap m_mapIPToAlertInfo;

 

添加:

 ALARM_INFO pAlarmInfo ; 
 pAlarmInfo.dwAlarmSeq = dwAlarmSeq;
 pAlarmInfo.dwCreatedTime = INFOX_GetTickCount();//当前时间
 m_mapIPToAlertInfo.insert(multimap< CString,ALARM_INFO >::value_type((CString)lpszClientIP,(ALARM_INFO)pAlarmInfo));

 

查找:

Alarm_mutimap_sz icount = m_mapIPToAlertInfo.count((CString)lpszClientIP);

if(0 == icount)

{return;}

multimap < CString,ALARM_INFO>::const_iterator itAlarminfo = m_mapIPToAlertInfo.lower_bound((CString)lpszClientIP);
 if (itAlarminfo != m_mapIPToAlertInfo.end())
 {
  dwAlarmSeq = itAlarminfo->second.dwAlarmSeq;
 }

 

删除:

Alarm_mutimap_sz icount = m_mapIPToAlertInfo.count((CString)lpszClientIP);
 if (0 != icount)
 {
  Alarm_mutimap_it itAlarminfo = m_mapIPToAlertInfo.lower_bound((CString)lpszClientIP);
  if (itAlarminfo != m_mapIPToAlertInfo.end())
  {
   TRACE("delete %d",itAlarminfo->second.dwAlarmSeq);
   m_mapIPToAlertInfo.erase(itAlarminfo);   
  }
 }

清除超时:

__UINT32 dwCurrentTime = INFOX_GetTickCount();//当前时间
    ALARM_INFO pAlarmInfo ;

 Alarm_mutimap_it itAlarmInfo = m_mapIPToAlertInfo.begin();
 for (;m_mapIPToAlertInfo.end() != itAlarmInfo;itAlarmInfo++)
 {
  pAlarmInfo =itAlarmInfo->second;
  if ( (dwCurrentTime - pAlarmInfo.dwCreatedTime) >= dwMaxLife)
  {
   m_mapIPToAlertInfo.erase(itAlarmInfo);
   dwDeleteNum++;
   itAlarmInfo = m_mapIPToAlertInfo.begin();
  }
 }