#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
//定义Student类,以此类对象作为vector的元素
class Student {
public:
int m_score;
string m_name;
};
//定义排序规则,按对象的成绩值降序
struct Rule {
bool operator()(Student& s1, Student& s2) {
return s1.m_score > s2.m_score;
}
};
//定义查找规则,按对象的名字进行查找
class IsName {
public:
string z;
//定义构造函数,传入对象的姓名值
IsName(string name) {
z = name;
}
bool operator()(Student s) {
return s.m_name == z;
}
};
int main() {
//创建一个容器v
vector <Student> v;
char s;
//将判断字母存入字符s中,选择进行哪一项操作
while (cin >> s) {
if (s == 'A') {
Student s1;
cin >> s1.m_name;
cin >> s1.m_score;
//判断容器是否为空,若为空则直接插入,若不为空则判断是否已经有该学生的成绩
if (!v.empty()) {
vector <Student>::iterator it = find_if(v.begin(), v.end(), IsName(s1.m_name));
if (it != v.end()) {
//已有该学生的信息,替换成绩
(*it).m_score = s1.m_score;
}
else {
//没有该学生信息,直接插入
v.push_back(s1);
}
}
else {
v.push_back(s1);
}
}
else if (s == 'R') {
string temp;
cin >> temp;
//find_if函数找到学生信息,erase函数删除迭代器所指示的元素
vector <Student>::iterator it = find_if(v.begin(), v.end(), IsName(temp));
if (it != v.end()) {
v.erase(it);
}
}
else if (s == 'P') {
if (!v.empty()) {
//不为空输出全部
for (vector <Student>::iterator it = v.begin(); it != v.end(); it++) {
cout << (*it).m_name << " " << (*it).m_score << endl;
}
}
else {
//为空输出空
cout << "[空]" << endl;
}
}
else if (s == 'S') {
//sort函数进行排序,Rule此前已写好
sort(v.begin(), v.end(), Rule());
}
}
return 0;
}
//周忠倩我爱你
此程序多个if判断函数使效率降低,可以使用switch进行改进