#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class Stu {
public:
string Name;
int Score;
Stu(const string& name, const int& score) { // 构造函数
Name = name;
Score = score;
}
Stu() {} //析构函数
}s; //创建一个名为s的Stu类
bool compare(const Stu& a, const Stu& b) { //比较函数,用于sort函数的比较器中
return a.Score > b.Score;
}
//bool operator==(const Stu& c, const string& name) {
// return c.Name == name;
//}
class Cao {
public:
void A(vector<Stu>& stu); //信息录入
void P(vector<Stu>& stu); //信息输出
void S(vector<Stu>& stu); //比较排序
void R(vector<Stu>& stu); //删除信息
};
void Cao::A(vector<Stu>& stu) {
cin >> s.Name;
for (vector<Stu>::iterator it = stu.begin(); it != stu.end(); it++) {
if ((*it).Name == s.Name) {
cin >> s.Score;
(*it).Score = s.Score;
}
}
cin >> s.Score;
stu.push_back(s); //将简称s的值赋回给定义的实类
}
void Cao::P(vector<Stu>& stu) {
if (stu.empty()) { cout << "[空]" << endl; }
else {
for (vector<Stu>::iterator it = stu.begin(); it != stu.end(); it++) {
cout << (*it).Name << " " << (*it).Score << endl;
}
}
}
void Cao::R(vector<Stu>& stu) {
string n;
cin >> n;
for (vector<Stu>::iterator it = stu.begin(); it != stu.end(); it++) {
if ((*it).Name == n) {
stu.erase(it);
break; //跳出循环
}
}
}
void Cao::S(vector<Stu>& stu) {
sort(stu.begin(), stu.end(), compare);
//sort函数自带比较器,若不定义,默认升序
}
int main()
{
Cao nb;
vector<Stu>stu;
char x;
while (cin >> x)
{
if (x == 'A') { nb.A(stu); }
else if (x == 'P') { nb.P(stu); }
else if (x == 'R') { nb.R(stu); }
else if (x == 'S') { nb.S(stu); }
}
return 0;
}
测试输入:
P
A 小明 10
A 小明 20
P
R 小明
P
预期输出
[空]
小明 20
[空]
实际输出
P
[空]
A 小明 10
A 小明 20
P