重载运算符结果RE了。。。
查看原帖
重载运算符结果RE了。。。
339978
大白菜ac楼主2020/8/5 08:34

问题就在于结构体中运算符的重载,我下载了第一个非AC的数据,结果本地运行出现了Expression:invalid comparator。但我不知道"<"的重载为什么有问题?

#include <iostream>
#include <algorithm>
using namespace std;

struct row {
	int num;//数量
	int i;//序号
   //这个函数的意思:如果两个的num都>0,那么序号i小的就排在前面;否则num>0的排在前面
	bool operator<(const row a)const {
		if (this->num > 0 && a.num == 0)
			return true;
		else if (this->num > 0 && a.num > 0)
			return this->i < a.i;
		else if (this->num == 0 && a.num > 0)
			return false;
		else
			return true;
	}
};

struct column {
	int num;
	int i;
	bool operator<(const column a)const {
		if (this->num > 0 && a.num == 0)
			return true;
		else if (this->num > 0 && a.num > 0)
			return this->i < a.i;
		else if (this->num == 0 && a.num > 0)
			return false;
		else
			return true;
	}
};

int main() {
	int m, n, k, l, d;
	cin >> m >> n >> k >> l >> d;
	row* p = new row[m];
	column* q = new column[n];
	//初始化
	for (int i = 0; i < m; i++)
		p[i].num = 0, p[i].i = 0x7fffff;
	for (int i = 0; i < n; i++)
		q[i].num = 0, q[i].i = 0x7fffff;
	int x1, y1, x2, y2;
	for (int i = 0; i < d; i++) {
		cin >> x1 >> y1 >> x2 >> y2;
		if (x1 == x2) {//列
			int t = (y1 + y2) >> 1;
			q[t - 1].i = t, q[t - 1].num++;
		}
		else if (y1 == y2) {//行
			int t = (x1 + x2) >> 1;
			p[t - 1].i = t, p[t - 1].num++;
		}
	}
	//处理数据
	sort(p, p + m);
	sort(q, q + n);
	cout << p[0].i;
	for (int i = 1; i < k; i++) {
		cout << " " << p[i].i;
	}
	cout << endl;
	cout << q[0].i;
	for (int i = 1; i < l; i++) {
		cout << " " << q[i].i;
	}
	return 0;
}
2020/8/5 08:34
加载中...