1. 程式人生 > 其它 >c++ sort函式cmp的有關情況(由淺入深)

c++ sort函式cmp的有關情況(由淺入深)

技術標籤:我的筆記排序演算法演算法cmp

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; } } } }

這樣就解決這個複雜的問題了。