上链接:P5266 【深基17.例6】学籍管理 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5266#submit
题干:
题目描述
您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 105105 条):
- 插入与修改,格式
1 NAME SCORE
:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为 SCORESCORE(0<SCORE<2310<SCORE<231) 的学生。如果已经有同名的学生则更新这名学生的成绩为 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
这道题是map的基础运用
让我们来介绍一下map的一些基本函数
首先定义一个map
代表mmp的下标数据类型是string,值数据类型是int
第一个就是插入
我们可以用一个最简单的插入方式数组下标式
如果map内已经存在该下标,那么新的值会覆盖原来的值。如果不存在,就创建一个新下标。
第二个是查询map.find()
map.find(),查找的是map的下标,如果map里存在该下标,那么返回该迭代器,否则返回map.end()
第三个是删除,map.erase()
参数是具体下标,或者迭代器,或者一个区域
但是无论是迭代器,区域都是指向下标的,也就是键值
erase的返回参数是0或1,代表是否删除成功。
当map里面存在该元素,删除成功,反正不成功
第四个是求map的元素个数:map.size()
返回map里元素的个数
好的,接下来就是上代码了:
int score, t,opt;
string name;
int main()
{map<string, int> mmp;cin >> t;while (t--){cin >> opt;if (opt == 1){cin >> name >> score;mmp[name] = score;cout << "OK" << endl;}else if (opt == 2){cin >> name;if (mmp.find(name) != mmp.end())cout << mmp[name] << endl;else cout << "Not found" << endl;}else if (opt == 3){cin >> name;if (mmp.find(name) != mmp.end()){cout <<"Deleted successfully" << endl;mmp.erase(name);}else cout << "Not found" << endl;}elsecout << mmp.size() << endl;}}