根据一个参数对数组进行排序

时间:2018-03-09 18:57:25

标签: c++ sorting stl

#include<bits/stdc++.h>

using namespace std;
struct node{
    long long int d;
    long long int e;
};

int main() {
    long long int n,q,i,f;
    scanf("%lld%lld",&n,&q);
    struct node *a=(struct node *)malloc(n*sizeof(struct node));
    struct node *c=(struct node *)malloc(sizeof(struct node));
    for(i=0;i<n;i++){
        scanf("%lld",&f);
        a[i].d=f;
        a[i].e=i;
    }
}

如果我只想通过&#39; d&#39;来排序这个数组。参数,然后我将如何使用stl中规定的排序函数? 我想在保留索引的同时对此数组进行排序。 如果数组后跟下一行的索引是:

4 2 1 3

0 1 2 3

然后我希望我的输出为:

1 2 3 4

2 1 3 0

2 个答案:

答案 0 :(得分:0)

Try this:

// ...
bool my_compare(const node &i, const node &j)
{
    return i.d < j.d;
}

// ...

std::sort(a, a+n, my_compare);

or use std::stable_sort if you want a stable sort. Although not needed in this case, as commented below, a lambda compare function with no capture could also be used:

std::sort(a, a+n, [](const node &i, const node &j){return i.d < j.d});

答案 1 :(得分:0)

只需在struct中重载运算符,然后对数组进行排序。

struct node{
    long long int d;
    long long int e;
    bool operator<(const node & other) const {
        return d<other.d;
    }
};

sort(a,a+n);