头文件:#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();
}
}