相比map,multimap可以插入相同鍵值的元素,兩者的輸入方式也不同。
multimap有插入,删除,查找等功能。接下來,用一個程式将幾個函數串起來。
文章下方附有map的連結。
代碼:
/*
Author:YuBo
Date:2018/2/6
multimap
*/
#include<iostream>
#include<string>
#include<map>
using namespace std;
multimap<string,float> m;
multimap<string,float>::iterator it;
multimap<string,float>::reverse_iterator rit;
void menu()
{
cout<<"******1.插入 2.删除******"<<endl;
cout<<"******3.查找 4.顯示******"<<endl;
cout<<"******5.退出******"<<endl;
}
void Insert()
{
int i,n;string s;float f;
cout<<"請輸入同學人數:"<<endl;
cin>>n;
cout<<"請依次輸入"<<n<<"位同學的姓名及成績:"<<endl;
for(i=0;i<n;i++)
{
cin>>s>>f;
m.insert(pair<string,float>(s,f));
}
}
void Delete()
{
int i,place,flag;
string ss;
cout<<"******1.删除某個同學資訊 2.删除某位置的同學資訊******"<<endl;
cout<<"******3.全部删除 ******"<<endl;
cin>>i;
switch(i)
{
case 1:{
cout<<"請輸入該同學的名字:"<<endl;
cin>>ss;
flag=m.erase(ss);
if(flag==0)cout<<"沒有這位同學,删除失敗。"<<endl;
}break;
case 2:{
cout<<"請輸入位置(首元素位置為0):"<<endl;
cin>>place;
if(place<0||place>m.size())cout<<"位置不在範圍内。"<<endl;
else
{
it=m.begin();
while(place)it++;
ss=(*it).first;
m.erase(ss);
}
}break;
case 3:m.clear();break;
default:cout<<"輸入錯誤!"<<endl;
}
}
void Find()
{
string name;
cout<<"請輸入同學的名字:"<<endl;
cin>>name;
it=m.find(name);
if(it!=m.end())
{
cout<<(*it).first<<":"<<(*it).second<<endl;
}
else
cout<<"沒有這位同學。"<<endl;
}
void Display()
{
int i;
cout<<"1.按姓名升序 2.按姓名降序"<<endl;
cin>>i;
switch(i)
{
case 1:{
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<":"<<(*it).second<<endl;
}
}break;
case 2:{
for(rit=m.rbegin();rit!=m.rend();rit++)
{
cout<<(*rit).first<<":"<<(*rit).second<<endl;
}
}break;
default:cout<<"輸入錯誤!"<<endl;
}
}
int main()
{
int i;
while(1)
{
menu();
cout<<"請輸入菜單号:"<<endl;
cin>>i;
if(i==5)break;
switch(i)
{
case 1:Insert();break;
case 2:Delete();break;
case 3:Find();break;
case 4:Display();break;
default:cout<<"輸入錯誤!"<<endl;
}
}
return 0;
}
運作截圖:

當鍵值相同時,按另一個進行排序。
map的使用:http://blog.csdn.net/lady_killer9/article/details/79283548
有問題請下方評論,轉載請注明出處,并附有原文連結,謝謝!如有侵權,請及時聯系。