如何在c ++中对属于同一类别/集合的结构向量进行排序

时间:2016-07-13 20:12:14

标签: algorithm sorting stl

在解决竞争性编码问题时,我遇到了以下排序方案 我有一个以下结构的载体

struct Data{
    int p;
    int val;
    int ll;
};

定义为:

vector<Data> a(N);

现在结构中的p字段告诉val所属的设定编号 例如,如果值为1 2 3 4 5 6 7 8 9
(1,4,7)属于组/组3,即p为3,(2,5,8)属于组/组4,即p为4,(3,6,9)属于组/组5即p是5

我的结构为p和val字段为
p为3 4 5 3 4 5 3 4 5
val为1 2 3 4 5 6 7 8 9

现在问题是我必须按降序对矢量集进行排序 即7 8 9 4 5 6 1 2 3 这里1 4和7属于第3组,因此它们按各自的位置排序。

我尝试使用下面的选择排序,但是由于O(N ^ 2)的复杂性,它超出了时间限制。

for(int i=0;i<N;i++)
{
    int mi=i;
    Data max=a[i];
    for(int j=i+1;j<N;j++)
    {
        if((a[i].p==a[j].p)&&(a[j].val>max.val))
        {
            max=a[j];
            mi=j;
        }
    }
    a[mi]=a[i];
    a[i]=max;
}

请帮助我找到排序此方案的最佳(时间复杂度)方法(如果可能,使用STL排序)。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

修改http://www.cplusplus.com/reference/algorithm/sort/,关键位是:

<div>test</div>

请注意,在#include <algorithm> ... bool mycomparison (Data i, Data j) { if (i.p != j.p) return j.p < i.p; else return j.val < i.val; } ... // Sort vector a a.std::sort( a.begin(), a.end(), mycomparison ); ... 行中撤消ij会导致事情按降序排列。