Map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, “student_one”));
mapStudent.insert(pair<int, string>(2, “student_two”));
mapStudent.insert(pair<int, string>(3, “student_three”));
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
Cout<<iter->first<<” ”<<iter->second<<end;
}
18.观察者模式,IMessageObserver,map< DWORD,list<MESSAGE_OBSERVER*> > mapObservers,vector;
list<MESSAGE_OBSERVER*> listob;
map< DWORD,list<MESSAGE_OBSERVER*> > mapObservers;
//获得事件注册接口
void CMessageManager::QueryObservers( const DWORD& guidMessage, std::list<IMessageObserver*>& listOb )
{
//EnterCriticalSection(&m_cs);
if( mapObservers.find( guidMessage) == mapObservers.end() )
{
// LeaveCriticalSection(&m_cs);
return;
}
list<MESSAGE_OBSERVER*>& listOb2 = mapObservers[guidMessage];
//注册一类事件
void CMessageManager::AttachMessage( const DWORD& guidMessage, IMessageObserver* pObserver,MESSAGE_OBSERVER_PRIORITY enumPri )
{
MESSAGE_OBSERVER* pMo = new MESSAGE_OBSERVER;
pMo->enumMessageObserverPriority = enumPri;
pMo->pMessageObserver = pObserver;
EnterCriticalSection(&m_cs);
if( mapObservers.find(guidMessage) != mapObservers.end() )
{
list<MESSAGE_OBSERVER*>& listOb = mapObservers[guidMessage];
list<MESSAGE_OBSERVER*>::iterator it = listOb.begin();
for(;it != listOb.end();it++ )
{
if( (*it)->enumMessageObserverPriority >= enumPri )
{
listOb.insert(it,pMo);
break;
}
}
if( it == listOb.end() )
{
listOb.push_back(pMo);
}
}
else
{
list<MESSAGE_OBSERVER*> listob;
listob.push_back(pMo);
mapObservers[guidMessage] = listob;
}
LeaveCriticalSection(&m_cs);
}
for( list<MESSAGE_OBSERVER*>::iterator it = listOb2.begin(); it != listOb2.end(); it++ )
{
listOb.push_back((*it)->pMessageObserver);
}
//LeaveCriticalSection(&m_cs);
}
//反注册一类事件
void CMessageManager::DetachMessage( const DWORD& guidMessage, IMessageObserver* pObserver )
{
EnterCriticalSection(&m_cs);
if( mapObservers.find(guidMessage) == mapObservers.end() )
{
LeaveCriticalSection(&m_cs);
return;
}
list<MESSAGE_OBSERVER*>& listOb = mapObservers[guidMessage];
for( list<MESSAGE_OBSERVER*>::iterator it = listOb.begin(); it != listOb.end(); it++ )
{
if( (*it)->pMessageObserver == pObserver )
{
delete (*it);
listOb.erase(it);
break;
}
}
LeaveCriticalSection(&m_cs);
}