#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
答案 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);