1. 程式人生 > >STL--過載操作符與qsort排序

STL--過載操作符與qsort排序

注意,用sort排序的時候,傳的是(開始位置的指標,接受比較的指標);

然後就是在結構體重,過載操作符,注意在結構體中,如果想按一定的規律排序是必須過載操作符的,包括< ==.

過載操作符下面是用qsort寫的.

程式碼如下:

#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
using namespace std;

struct Node{
	int num;
	int l;
	int h;
	bool operator < (Node t) const//過載小於號
	{
		int L1 = max(l, h);
		int H1 = min(l, h);
		int L2 = max(t.l, t.h);
		int H2 = min(t.l, t.h);
		if(num!=t.num)
			return num<t.num;//過載操作符
		else
		{
			if(L1!=L2)
				return L1<L2;
			else
				return H1<H2;
		}
	}
	bool operator == (Node t) const//過載等於號
	{
		int L1 = max(l, h);
		int H1 = min(l, h);
		int L2 = max(t.l, t.h);
		int H2 = min(t.l, t.h);
		return L1 == L2 && H1==H2;
	}
}a[1005];
int main()
{
	int T;
	int i;
	scanf("%d",&T);
	while(T--)
	{
		int m;
		scanf("%d",&m);
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&a[i].num,&a[i].l,&a[i].h);
			if (a[i].l < a[i].h) {
				swap(a[i].l, a[i].h);
			}
		}
		sort(a,a+m);
		m=unique(a,a+m)-a;//unique()需要的引數必須是指標  返回的也是指標.
		for(i=0;i<m;i++)
			printf("%d %d %d\n",a[i].num,a[i].l,a[i].h);
	}
	return 0;
}

#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
using namespace std;

/*struct Node{
	int num;
	int l;
	int h;
	bool operator < (Node t) const//過載小於號
	{
		int L1 = max(l, h);
		int H1 = min(l, h);
		int L2 = max(t.l, t.h);
		int H2 = min(t.l, t.h);
		if(num!=t.num)
			return num<t.num;//過載操作符
		else
		{
			if(L1!=L2)
				return L1<L2;
			else
				return H1<H2;
		}
	}
	bool operator == (Node t) const//過載等於號
	{
		int L1 = max(l, h);
		int H1 = min(l, h);
		int L2 = max(t.l, t.h);
		int H2 = min(t.l, t.h);
		return L1 == L2 && H1==H2;
	}
}a[1005];*/
struct Node{
	int num;
	int l;
	int h;
	bool operator == (Node t) const
	{
		return h==t.h&&l==t.l;
	}
}a[1005];
int cmp(const void *a,const void *b)
{
	Node *x=(Node *)a,*y=(Node *)b;
	if(x->num!=y->num)
	{
		return x->num-y->num;
	}
	else
	{
		if(x->l!=y->l)
			return x->l-y->l;
		else
			return x->h-y->h;
	}
}
int main()
{
	int T;
	int i;
	scanf("%d",&T);
	while(T--)
	{
		int m;
		scanf("%d",&m);
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&a[i].num,&a[i].l,&a[i].h);
			if (a[i].l < a[i].h) {
				swap(a[i].l, a[i].h);
			}
		}
		//sort(a,a+m);
		qsort(a,m,sizeof(a[0]),cmp);
		m=unique(a,a+m)-a;//unique()需要的引數必須是指標  返回的也是指標.
		for(i=0;i<m;i++)
			printf("%d %d %d\n",a[i].num,a[i].l,a[i].h);
	}
	return 0;
}