P5266 【深基17.例6】学籍管理题解

题目

您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过10^{5}条):

  • 插入与修改,格式1 NAME SCORE:在系统中插入姓名为NAME(由字母和数字组成不超过20个字符的字符串,区分大小写) ,分数为SCORE(0<SCORE<2^{31}) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
  • 查询,格式2 NAME:在系统中查询姓名为NAME的学生的成绩。如果没能找到这名学生则输出Not found,否则输出该生成绩。
  • 删除,格式3 NAME:在系统中删除姓名为NAME的学生信息。如果没能找到这名学生则输出Not found,否则输出Deleted successfully
  • 汇总,格式4:输出系统中学生数量。

输入输出样例

输入样例

5
1 lxl 10
2 lxl
3 lxl
2 lxl
4

 输出样例

OK
10
Deleted successfully
Not found
0

解析

这样的学籍管理系统也是一个集合,但是功能比较复杂--需要根据索引找到对应的元素,并对元素进行操作。可以通过调用STL库里面的map来解决这个问题。

map关联集合的本质也是一棵红黑树,可以看作一个下标可以是任意类型的数组。其头文件是map,可以调用map实现如下几个基本功能。

(1)map<A,B> ds:建立一个名字叫做ds,下标类型为A,元素类型为B的映射表,例如map<string,int>就是一个将string映射到int的映射表。

(2)ds[A]=B:把这个”数组”中下标为A的位置的值变成B,这里下标可以是任意类型,不一定限定为大于0的整数,比如map<string,string>ds,就可以进行ds["kkksc03"]="mascot"的操作。

(3)ds[A]:访问这个“数组”中下标为A的元素,比如可以进行cout<<ds["kkksc03"]<<endl;这样的操作。

(4)ds.end():返回映射表中最后一个元素的下一个元素的地址。

(5)ds.find(x):查询x在映射表中的地址,如果这个数不存在,则返回ds.end()。

(6)ds.empty():如果集合是空的,则返回1,否则返回0。

(7)ds.size():返回映射表中的元素个数

(8)ds.erase(A):删除这个”数组”中下标为A的元素。

注意:在使用ds[A]访问“数组”下标为A的元素时,如果这个下标对应的元素不存在,则会自动创建下标为A,值为默认值的元素。

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
int n,opt,num;
string name;
map<string,int> ds;
int main(){
	cin>>n;
	while(n--){
		cin>>opt;
		if(opt==1){
			cin>>name>>num;
			ds[name]=num;//这里对映射表name所对应的值修改为num 
			cout<<"OK"<<endl;
		}
		else if(opt==2){
			cin>>name;
			if(ds.find(name)!=ds.end()){
				cout<<ds[name]<<endl;
			}
			else{
				cout<<"Not found"<<endl;
			}
		}
		else if(opt==3){
			cin>>name;
			if(ds.find(name)!=ds.end()){
				ds.erase(ds.find(name));
				cout<<"Deleted successfully"<<endl;
			}
			else{
				cout<<"Not found"<<endl;
			}
		}
		else{
			cout<<ds.size()<<endl;
		}
	}
	return 0;
}

相关推荐

  1. P5707 【2.12】上学迟到题解

    2024-03-12 04:14:03       39 阅读
  2. 洛谷题解 - P2249 【13.1】查找

    2024-03-12 04:14:03       20 阅读
  3. P5705 【2.7】数字反转题解

    2024-03-12 04:14:03       35 阅读
  4. (洛谷)P5734 【6.6】文字处理软件

    2024-03-12 04:14:03       33 阅读
  5. 洛谷P5318 【18.3】查找文献

    2024-03-12 04:14:03       26 阅读
  6. P5740 【7.9】最厉害的学生

    2024-03-12 04:14:03       25 阅读
  7. P5719 【4.3】分类平均

    2024-03-12 04:14:03       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 04:14:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 04:14:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 04:14:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 04:14:03       20 阅读

热门阅读

  1. 【Flink SQL】Flink SQL 基础概念:数据类型

    2024-03-12 04:14:03       21 阅读
  2. Vuex getters源码分析

    2024-03-12 04:14:03       18 阅读
  3. 嵌出式008

    2024-03-12 04:14:03       17 阅读
  4. JVM-5

    JVM-5

    2024-03-12 04:14:03      24 阅读
  5. js怎么清空数组?

    2024-03-12 04:14:03       21 阅读
  6. LCR 172. 统计目标成绩的出现次数(二分查找)

    2024-03-12 04:14:03       18 阅读
  7. 蓝桥杯2023年-更小的数(字符串,推理)

    2024-03-12 04:14:03       21 阅读