题目链接:P5266 【深基17.例6】学籍管理 - 洛谷 | 计算机科学教育新生态
题目难度:普及/提高
解题思路:本题会map就是一道简单题,也可以当作map的练手题帮助熟悉map的操作
本题需要用到map的以下几个操作:
a.count(x) | 判断x为下标的元素是不是在a中,是就返回1,不是就返回0 |
a.erase(x) | 删除a中x为下标的元素 |
a.size() | 返回a中元素的个数 |
a.clear() | 清空a |
下面直接奉上代码部分:
#include<bits/stdc++.h>
using namespace std;
#define _for(i,a,b) for(int i=(a); i<(b); i++)
#define _rep(i,a,b) for(int i=(a); i<=(b); i++)
typedef long long ll;
const int N = 1010;
map<string,int>mp;//定义一个string(姓名)到int(分数)的map
string name;//学生姓名
int score; //学生分数
int n,op; //操作种类int read()//快读函数
{int k=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){k=k*10+ch-'0';ch=getchar();}return k*f;
}int main()
{
// ios::sync_with_stdio(false);
// cin.tie(nullptr),cout.tie(nullptr);n = read();while(n--){op = read();if(op == 1)//操作1 {cin >> name,score = read();mp[name] = score;//map的对应关系,把名字和分数对应起来puts("OK");}else if(op == 2)//操作2:查询学生{cin >> name;if(!mp.count(name)) puts("Not found");//找不到else cout<<mp[name]<<'\n';;//如果找得到输出对应的分数}else if(op == 3)//操作3:删除学生{cin >> name;if(!mp.count(name)) puts("Not found");else {mp.erase(name);puts("Deleted successfully");//成功删除}}else//操作4:学生人数{cout<<mp.size()<<'\n';}}return 0;
}