multimap<UINT, UINT> lObjMultiMap;
typedef multimap<UINT, UINT>::iterator MULTIMAP_ITERA;
lObjMultiMap.insert( pair<int,int>(0,10) ); //添加元素
lObjMultiMap.insert( pair<int,int>(0,1) );
lObjMultiMap.insert( pair<int,int>(0,4) ); //key 为0的元素有3 个数值
lObjMultiMap.insert( pair<int,int>(1,1) );
lObjMultiMap.insert( pair<int,int>(1,11) );
MULTIMAP_ITERA iter ; //遍历key 为 0的所有元素
pair<MULTIMAP_ITERA, MULTIMAP_ITERA > range ;
range = lObjMultiMap.equal_range(0);
for (iter=range.first; iter!=range.second; iter++)
{
cout <<iter->first<<" "<<iter->second<<endl;
}
// 删除指定key为 0 的所有元素
lObjMultiMap.erase(0);
//删除指定key 为0,数值为10的一个元素
range = lObjMultiMap.equal_range(0);
for (iter=range.first; iter!=range.second; iter++)
{
cout <<iter->first<<" "<<iter->second<<endl;
if (iter->second == 10)
{
lObjMultiMap.erase(iter);
break;
}
}
转,multimap使用实例: 事件订阅,subscribeEvent(事件名,Event::subcribe(回调函数);
方法subcribe通过一个Map Container;
typedef std::multimap<Group, Connection> SlotContainer,添加到容器中,
d_slots.insert(std::pair<Group,Connection>(group,c));而在事件触发时,
Event操作()遍历每个订阅事件的函数,代码如下:
for (; iter != end_iter; ++iter)
args.handled |= (*iter->second->d_subscriber)(args);
这样订阅事件的函数都会遍历回调到!