题目描述
您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 10^5105 条):
- 插入与修改,格式
1 NAME SCORE
:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为 $\texttt{SCORE}$($0<\texttt{SCORE}<2^{31}$) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
。 - 查询,格式
2 NAME
:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found
,否则输出该生成绩。 - 删除,格式
3 NAME
:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found
,否则输出Deleted successfully
。 - 汇总,格式
4
:输出系统中学生数量。
输入格式
无
输出格式
无
输入输出格式
输入 #1
5
1 lxl 10
2 lxl
3 lxl
2 lxl
4
输出 #1
OK
10
Deleted successfully
Not found
0
分析
可以用STL
里的map
,把 NAME 作为 $key$ ,$\texttt{SCORE}$ 作为 $value$ 。注意查询非空一定要用.count()
,否则查询之后会自动填充空白。
代码
#include<bits/stdc++.h>
using namespace std;
map<string,int> mp;
string name;
int T,in,score,ans;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&in);
if(in==1){
cin>>name>>score;
if(!mp.count(name))ans++;
mp[name]=score;
cout<<"OK"<<endl;
}
if(in==2){
cin>>name;
if(mp.count(name))cout<<mp[name]<<endl;
else cout<<"Not found"<<endl;
}
if(in==3){
cin>>name;
if(mp.count(name)){
mp.erase(name);
ans--;
cout<<"Deleted successfully"<<endl;
}else{
cout<<"Not found"<<endl;
}
}
if( in==4)cout<<ans<<endl;
}
}