multimap的用法:
mooc课上内容。
multimap容器里的元素,都是pair形式的
multimap<T1,T2> mp;
则mp里的元素都是如下类型:
struct{
T1 first; //关键字
T2 second; //值
};
multimap中的元素按照first排序,并可以按first进行查找
缺省的排序规则是"a.first<b.first"为true,则a排在b前面
multimap的应用:
mooc课上例题。
一个学生成绩录入和查询系统,接受以下两种输入:
Add name id score
Query score
name是个不超过16字符的字符串,中间没有空格,代表学生姓名。id是个整数,代表学号。score是个整数,表示分数。学号不会重复,
分数和姓名都可能重复。
两种输入交替出现。第一种输入表示要添加一个学生信息,碰到这种输入,就记下学生的姓名、id和分数。第二种输入表示要查询,碰到
这种输入,就输出已有记录中分数比score低的最高分获得者的姓名、学号和分数。如果有多个学生都满足条件,就输出学号最大的那个学生的信息。如果找不到满足条件的学生,则输出"Nobody"
输入样例:
Add Jack 12 78
Query 78
Query 81
Add Percy 9 81
Add Marry 8 81
Query 82
Add Tom 11 79
Query 80
Query 81
输出样例:
Nobody
Jack 12 78
Percy 9 81
Tom 11 79
Tom 11 79
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
struct StudentInfo{
int id;
char name[20];
};
struct Student{
int score;
StudentInfo info;
};
typedef multimap<int,StudentInfo> MAP_STD;
int main(){
MAP_STD mp;
Student st;
char cmd[20];
while(cin>>cmd){
if(cmd[0]=='A'){
cin>>st.info.name>>st.info.id>>st.score;
mp.insert(make_pair(st.score,st.info));
}
else if(cmd[0]=='Q'){
int score;
cin>>score;
MAP_STD::iterator p=mp.lower_bound(score);
if(p!=mp.begin()){
--p;
score=p->first;
MAP_STD::iterator maxp=p;
int maxId=p->second.id;
for(;p!=mp.begin()&&p->first==score;--p){
if(p->second.id>maxId){
maxp=p;
maxId=p->second.id;
}
}
if(p->first==score){
if(p->second.id>maxId){
maxp=p;
maxId=p->second.id;
}
}
cout<<maxp->second.name<<" "<<maxp->second.id<<" "<<maxp->first<<endl;
}
else cout<<"Nobody"<<endl;
}
}
return 0;
}