C++ 結構體多元素sort排序調用時的寫法

//總結一下,結構體數據排序的快速寫法
//之後在遇到須要寫的時候,不要遲疑快速寫完

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;
}
相關文章
相關標籤/搜索