我试图根据int[1000][2]的第一个条目(int [i][0])对一个类型的数组进行排序,我在STL中使用了排序函数,并编写了自己的比较对象。但是在编译时,它说数组类型int2是不可分配的。我的代码有什么问题?
#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;
}发布于 2016-07-11 16:47:50
可以将变量更改为
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<。
发布于 2016-07-11 16:50:25
我的代码有什么问题?
实际上,不能分配c样式数组,而且std::sort隐式调用赋值操作.它们需要使用std::copy或类似的方式填充。
我建议您使用std::array<std::array<int,2>,1000>而不是原始数组。
https://stackoverflow.com/questions/38312133
复制相似问题