1. 程式人生 > >C++ 結構體多元素sort排序呼叫時的寫法(轉

C++ 結構體多元素sort排序呼叫時的寫法(轉

轉自https://www.cnblogs.com/yspworld/p/4328590.html

struct node
{
    int u, v, w;   
}a[10000];  //假設該結構體有3個元素
 
//現在僅實現結構體陣列按照w的值從小到大的排序
 
//1.基於C++的過載寫法,寫在結構體的定義內 如下:
struct node
{
    int u, v, w;
    bool operator <(const node &x)const
    {
        return w<x.w; //升序排列
    }
};
 
//現在提高要求:如果w相同,則按照v的值升序排列(降序也可實現)
struct node
{
    int u, v, w;
    bool operator < (const node &x)const
    {
        if(w==x.w)
            return v<x.v;
          //return x.v<v; //按照的v的值降序排列
        else
            return w<x.w;
    }
};
 
//同理,也可對第三元素進行參與某種順序的排列
這種寫法直接呼叫<algorithm>裡的函式即可:sort(a, a+n);
 
//2.自己寫比較運算元函式的寫法
//  sort函式是可以支援調入第三參量(比較函式)<br>// 呼叫方式:sort(a, a+n, cmp);
struct node
{
    int u, v, w;
};
 
bool cmp(node a, node b)
{
    if(a.w < b.w ) //按照w的值進行的是:升序排列 !
        return true;
    else
        return false;
}
 
//還可以這樣寫
bool cmp(node a, node b)
{
    return a.w<b.w; //升序
}
 
//當然cmp函式也可以寫的稍微複雜點,也就是說,按照優先順序對結構體的多個成員按照某種規則排序,就像剛才上面寫的
//先按照w的值升序排序,如果w相等,再按照v的值升序排序
bool cmp(node a, node b)
{
    if(a.w==b.w)
        return a.v<b.v;
    else
        return a.w<b.w;
}
//或者這樣寫
bool cmp(node a, node b)
{
    if(a.w<b.w)
        return true;
    if(a.w==b.w && a.v<b.v )
        return true;
    return false;
}