#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class student {
public:
int num;
int xz;
int tk;
int yy;
int sum;
student(istream& is = cin) {
is >> num >> xz >> tk >> yy;
sum = xz + tk + yy;
}
};
bool xzmax(const student& a, const student& b) {
return a.xz > b.xz;
}
bool tkmax(const student& a, const student& b) {
return a.tk > b.tk;
}
bool yymax(const student& a, const student& b) {
return a.yy > b.yy;
}
bool summax(const student& a, const student& b) {
if (a.sum != b.sum) {
return a.sum > b.sum;
}
else if (a.yy != b.yy) {
return a.yy > b.yy;
}
else if (a.tk != b.tk) {
return a.tk > b.tk;
}
else if (a.xz != b.xz) {
return a.xz > b.xz;
}
else if (a.num != b.num) {
return a.num > b.num;
}
}
int main() {
int n;
cin >> n;
vector<student> svec(n);
sort(svec.begin(), svec.end(), xzmax);
cout << svec[0].num << " " << svec[0].xz << endl;
sort(svec.begin(), svec.end(), tkmax);
cout << svec[0].num << " " << svec[0].xz << endl;
copy(svec.begin(), svec.end(), yymax);
cout << svec[0].num << " " << svec[0].xz << endl;
cout << endl;
copy(svec.begin(), svec.end(), summax);
for (int i = 0; i != 3; ++i) {
cout << svec[i].sum << " " << svec[i].sum << endl;
}
}
你的std::copy用法写错了,看下面文档的参数要求
https://en.cppreference.com/w/cpp/algorithm/copy