harry47341
harry47341

Reputation: 25

Sorting a 2d array using built in c++ sort function

I was trying to sort an array of type int[1000][2] based on its first entry(int [i][0]), and I used the sort function in the STL and wrote my own comparison object. But when compiled it says that array type int[2] is not assignable. What is the problem with my code?

#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;
}

Upvotes: 0

Views: 576

Answers (2)

Cory Kramer
Cory Kramer

Reputation: 117876

You can change your variable from

int a[1000][2]

to a

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

or

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

Then std::sort will just work as you intend since std::pair and std::array already have an operator< defined.

Upvotes: 4

πάντα ῥεῖ
πάντα ῥεῖ

Reputation: 1

What is the problem with my code?

In fact c-style arrays cannot be assigned, and std::sort calls the assignment operation implicitly. They need to be filled using std::copy or alike.

I'd recommend you use a std::array<std::array<int,2>,1000> instead of the raw array.

Upvotes: 1

Related Questions