//---------------
#include "stdafx.h"
#include<iostream>
#include<map>
using namespace std;
void InitMultimap(multimap<int,int> &myMultimap)
{
//插入值
for(int i=1;i<10;i++)
{
myMultimap.insert(make_pair(i,i+1));
}
myMultimap.insert(make_pair(3,2));
myMultimap.insert(make_pair(5,3));
myMultimap.insert(make_pair(5,3));
myMultimap.insert(make_pair(5,3));
}
void TransversMultimap(multimap<int,int> &myMultimap)
{
/*遍历multimap容器,由于map_it一次指向包含一个键值对,
例如,当前map_it指向(a,0),自增之后指向(a,1)
故仅在第一次输出first值,使用count函数计算该键对应的值个数,
然后循环输出各second值,同时增加map_it */
multimap<int,int>::iterator map_it=myMultimap.begin();
cout<<"multimap:-------------------------------"<<endl;
while (map_it!=myMultimap.end())
{
cout<<map_it->first<<":";
typedef multimap<int,int>::size_type sz_type;//multimap数量类型
sz_type cnt=myMultimap.count(map_it->first); //返回一个键对应的值个数
for (sz_type i=0;i!=cnt;++map_it,++i) //循环输出各值,同时自增map_it
{
cout<<map_it->second<<" ";
}
cout<<endl;
}
}
void DeleteMultimap(multimap<int,int> &myMultimap,int firs,int second)
{
/*遍历multimap容器,由于map_it一次指向包含一个键值对,
例如,当前map_it指向(a,0),自增之后指向(a,1)
故仅在第一次输出first值,使用count函数计算该键对应的值个数,
然后循环判断first和second值,同时增加map_it */
multimap<int,int>::iterator map_it=myMultimap.begin();
while (map_it!=myMultimap.end())
{
typedef multimap<int,int>::size_type sz_type;//multimap数量类型
sz_type cnt=myMultimap.count(map_it->first); //返回一个键对应的值个数
for (sz_type i=0;i!=cnt;++map_it,++i) //循环输出各值,同时自增map_it
if(map_it->first==firs && map_it->second ==second)
{
map_it=myMultimap.erase(map_it);
--map_it; //回退到当前位置,否则不能删除多个重复值
}
}
}
int main()
{
multimap<int,int> yourMultimap;
InitMultimap(yourMultimap);
TransversMultimap(yourMultimap);
DeleteMultimap(yourMultimap,5,3);
TransversMultimap(yourMultimap);
getchar();
return 0;
}