//總結一下,結構體數據排序的快速寫法 //以后在遇到需要寫的時候,不要遲疑快速寫完 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函數是可以支持調入第三參量(比較函數)
// 調用方式: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; }