我试图根据第一个条目(int[1000][2]
)对类型int [i][0]
进行排序,我在STL中使用了sort函数并编写了自己的比较对象。但是在编译时它表示数组类型int [2]不可分配。我的代码有什么问题?
#include<iostream>
#include<fstream>
#include<algorithm>
class op {
public:
bool operator()(int a[2], int b[2]) {
return a[0] < b[0];
}
};
using namespace std;
int main() {
int money = 0;
int a[1000][2] = { 0 };
int total = 0, n = 0;
cin >> total>>n;
for (int i = 0; i < n; i++) {
cin >> a[i][0] >> a[i][1];
}
sort(a, a + n - 1, op());//where the problem occurred
for (int i=0; i<n; i++) {
if (a[1][i] < total) {
money = money + a[i][1] * a[i][0];
total = total - a[i][1];
}
else {
money = money + a[i][0] *total;
break;
}
}
cout << money << endl;
return 0;
}
答案 0 :(得分:4)
您可以从
更改变量int a[1000][2]
到
std::array<std::pair<int, int>, 1000>
或
std::array<std::array<int, 2>, 1000>
然后std::sort
将按照您的意图运作,因为std::pair
和std::array
已经定义了operator<
。
答案 1 :(得分:1)
我的代码有什么问题?
实际上无法分配c样式数组,std::sort
隐式调用赋值操作。它们需要使用std::copy
或类似的方式填充。
我建议您使用std::array<std::array<int,2>,1000>
代替原始数组。