使用内置的c ++排序函数对2d数组进行排序

时间:2016-07-11 16:46:02

标签: c++ arrays sorting stl

我试图根据第一个条目(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;
}

2 个答案:

答案 0 :(得分:4)

您可以从

更改变量
int a[1000][2]

std::array<std::pair<int, int>, 1000>

std::array<std::array<int, 2>, 1000>

然后std::sort将按照您的意图运作,因为std::pairstd::array已经定义了operator<

答案 1 :(得分:1)

  

我的代码有什么问题?

实际上无法分配c样式数组,std::sort隐式调用赋值操作。它们需要使用std::copy或类似的方式填充。

我建议您使用std::array<std::array<int,2>,1000>代替原始数组。