包含小于符号<和等于符号==运算符重载的结构体,用于存储母排一个基本的打孔信息
//母排上的打孔基本单元
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);
//---------------------------------------------------