set结构体类型的相等判断

82 篇文章 0 订阅

包含小于符号<和等于符号==运算符重载的结构体,用于存储母排一个基本的打孔信息


//母排上的打孔基本单元
struct WxpMupaiHoleUnit
{
	//位置信息,相对于母排中心
	string Pos;

	//半径
	string Radius;

	// <小于比较运算符重载
	bool operator <(const WxpMupaiHoleUnit & a)const
	{   //实现了降序排列
		return (atof(Pos.c_str())>atof(a.Pos.c_str()));
	}

	// ==相等运算符重载
	bool operator ==(const WxpMupaiHoleUnit & a)const
	{
		return ( atof(Pos.c_str())   == atof(a.Pos.c_str()) &&
			atof(Radius.c_str())== atof(a.Radius.c_str()) );
	}
};

用于定义一根母排描述信息的结构体,其中包含了数目不定的打孔信息

//母排结构信息
struct WxpMuPaiStructInfor
{  
	//母排名称
	string MuPaiName;

	//母排类型
	string MuPaiType;

	//母排前部长度
	string FrontLength;

	//母排中部长度
	string MidLength;

	//母排后部长度
	string RearLength;

	//母排中部旋转角度
	string MidRotateP;

	//打孔信息,去重排序(从大到小,上为大,下为小)
	set<WxpMupaiHoleUnit> sHoleInfor;

	//相同信息的母排数量
	int MuPaiCount;

	//初始化相同母排数量为1
	WxpMuPaiStructInfor()
	{
		MuPaiCount=1;
	}
	//重载等于==运算符
	bool operator==(const WxpMuPaiStructInfor& Mupai) const
	{
		if( MuPaiType == Mupai.MuPaiType  && 
			atof(FrontLength.c_str())==atof(Mupai.FrontLength.c_str()) &&
			atof(MidLength.c_str())==atof(Mupai.MidLength.c_str()) &&
			atof(RearLength.c_str())==atof(Mupai.RearLength.c_str()) &&
			atof(MidRotateP.c_str())==atof(Mupai.MidRotateP.c_str()) &&
			sHoleInfor==Mupai.sHoleInfor
			)
			return true;
		else
			return false;
	}
};

用于统计相同信息的母排数量,

     其中的关键点在于结构体的相等运算,不仅仅包含结构体本身一般数据成员的相等判断,还包含一个集合set的相等判断。集合的相等判断,关键在于集合set类型的结构体实现了相等符号==的重载。

//母排打孔信息统计
vector<WxpMuPaiStructInfor> vMupaiHoleInfor;

//单根母排描述信息
WxpMuPaiStructInfor MupaiHoleSingleInfor;

//**********填充单根母排信息*******************************
//***********************************************

//判断是否加入--------------------------------------
int kCount=vMupaiHoleInfor.size();
int k=0;

//具有相同参数,则只是数量加1	  
for(;k<kCount;k++)
	if(MupaiHoleSingleInfor==vMupaiHoleInfor[k])
		{				  
			vMupaiHoleInfor[k].MuPaiCount++;
			break;
		}	

//具有不同参数,直接插入
if(k==kCount)
	vMupaiHoleInfor.push_back(MupaiHoleSingleInfor);
//---------------------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值