C++入門:結構體

結構體聲明

//沒有標明其標籤,聲明瞭結構體變量s1
struct
{
    int a,b;
    char c;
    double d;
    int add() {return a+b;}
} s1;
//s1.a=1;

//結構體的標籤被命名爲SIMPLE,用SIMPLE標籤的結構體,另外聲明瞭變量t1, t2[20], *t3
struct SIMPLE
{
    int a;
    char b;
    double c;
};
SIMPLE t1, t2[20], *t3;

//結構體的標籤被命名爲Simple2,用Simple2作爲類型聲明新的結構體變量u1, u2[20], *u3
typedef struct
{
    int a;
    char b;
    double c;
} Simple2;
Simple2 u1, u2[20], *u3;//若去掉typedef則編譯報錯,error C2371: “Simple2”: 重定義;不同的基類型

注:在上面的聲明中,第一個和第二聲明被編譯器當作兩個完全不同的類型,即使他們的成員列表是一樣的,如果令t3=&s1,則是非法的。

結構體排序

  • 基於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);
  • 自己寫比較算子函數的寫法
//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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章