首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用内置的c++排序函数对2d数组进行排序

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

Stack Overflow用户
提问于 2016-07-11 16:46:01
回答 2查看 561关注 0票数 0

我试图根据int[1000][2]的第一个条目(int [i][0])对一个类型的数组进行排序,我在STL中使用了排序函数,并编写了自己的比较对象。但是在编译时,它说数组类型int2是不可分配的。我的代码有什么问题?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-11 16:47:50

可以将变量更改为

代码语言:javascript
复制
int a[1000][2]

到一个

代码语言:javascript
复制
std::array<std::pair<int, int>, 1000>

代码语言:javascript
复制
std::array<std::array<int, 2>, 1000>

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

票数 4
EN

Stack Overflow用户

发布于 2016-07-11 16:50:25

我的代码有什么问题?

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38312133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档