一种排序的例程的解释

 
#include<iostream>
#include<set>
#include<iterator>
using namespace std;
struct Rect
{
	int num,length,width;
	
};
bool operator<(const Rect& r1,const Rect& r2)
{
	return r1.num<r2.num || r1.num==r2.num && r1.length<r2.length ||r1.num==r2.num&&r1.length==r2.length &&r1.width<r2.width;
}
istream& operator>>(istream& in,Rect& r)
{
	in>>r.num;
	int a,b;
	cin>>a>>b;
	r.length=max(a,b);
	r.width=min(a,b);
	return in;
}
ostream& operator<<(ostream& out,const Rect& r)
{
	return out<<r.num<<" "<<r.length<<" "<<r.width;
}
int main()
{
	int num;
	cin>>num;
	while(num--)
	{
		set<Rect> rs;
		Rect r;
		int n;
		cin>>n;	
		while(n--)
		{
			cin>>r;
			rs.insert(r);
		}
		copy(rs.begin(),rs.end(),ostream_iterator<Rect>(cout,"\n"));
		
	}


}        

例程最难懂的两条语句一个是

copy(rs.begin(),rs.end(),ostream_iterator<Rect>(cout,"\n"));

还有是:

bool operator<(const Rect& r1,const Rect& r2)
{
return r1.num<r2.num || r1.num==r2.num && r1.length<r2.length ||r1.num==r2.num&&r1.length==r2.length &&r1.width<r2.width;
}

用set的insert 有两种功能,第一相同的结构体会自动的排除,不能嵌入,同时会自动排序,而排序的功能string 是字母表,整数是大小,所以对此我们的排序需要进行重载

第一个则是吧set复制到输出流没碰到一个rect的结构体就换行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值