multimap的应用

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值