小于号重载求助
查看原帖
小于号重载求助
555584
weiming3楼主2023/3/11 21:35

写了个class重载<号,但是我明明写了成绩降序号码升序,但只生效了成绩降序,这是为什么呢?

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
class score {
	public:
		int number;
		int grade;
		score(int number = 0, int grade = 0) {
			this->number = number;
			this->grade = grade;
		}
		friend	bool operator<(score& a, score& b) {
			if (a.grade < b.grade) {
				return true;
			} else if (a.grade == b.grade) {
				if (a.number > b.number) {
					return true;
				} else {
					return false;
				}
			} else {
				return false;
			}
		}
};
void greater_sort(score *a, int n) {
	for (int i = 0; i <= n - 1; i++) {
		for (int j = i + 1; j <= n - 1; j++) {
			if (a[i].grade < a[j].grade) {
				swap(a[i], a[j]);
			}
		}
	}
}
int main() {
	int n, m;
	cin >> n >> m;
	score a[5005];
	for (int i = 0; i <= n - 1; i++) {
		int n, g;
		cin >> n >> g;
		score s(n, g);
		a[i] = s;
	}
	greater_sort(a, n);
	int linenumber = floor(m * 1.5);
	if (linenumber > n) {
		linenumber = n;
	}
	int actual_number = linenumber;
	int linescore = a[linenumber - 1].grade;
	for (int i = linenumber; i <= n - 1; i++) {
		if (a[i].grade == linescore) {
			actual_number++;
		} else {
			break;
		}
	}
	cout << linescore << " " << actual_number << endl;
	for (int i = 0; i <= actual_number - 1; i++) {
		cout << a[i].number << " " << a[i].grade << endl;
	}
	return 0;
}
2023/3/11 21:35
加载中...