c++ sort函式cmp的有關情況(由淺入深)
阿新 • • 發佈:2021-01-21
sort(first,last,cmp)
sort預設是從小到大排序,要改成從大到小排序則可修改cmp
bool cmp(int a,int b)
{
return a > b;
}
這就是從大到小排序了,a>b時返回true
要實現從小到大排序可改為a<b
可以再變得複雜一點,如果是結構體裡的元素比較大小呢,也可以用修改cmp裡的內容來實現。
struct c{
int a;
int d;
int e;
};
typedef struct c b;
bool cmp(b x,b y)
{
return x.a > y. a;
}
這個就是實現依照結構體裡的a大小來進行從大到小排序
假如我們再深入一點,對上面結構體排序定義如下規則:
1.優先考慮a,a較大的放在前面
2.其次考慮b,即在a相等的情況,b較大的在前面
3.最後考慮c,即在a,d都相等的情況,c較大的在前面
這種情況如何考慮呢?
我們也可以用cmp來實現,只需修改一些內容就可以了。
bool cmp(b x,b y)
{
if(x.a>y.a)
{
return true;
}
else if(x.a<y.a)
{
return false;
}
else
{
if(x.b>y.b)
{
return true;
}
else if(x.b<y.b)
{
return false;
}
else
{
if(x.c>y.c)
{
return true;//返回值為真則降序,為假則不變
}
else
{
return false;
}
}
}
}
這樣就解決這個複雜的問題了。