当我们使用set集合时,当set集合是由两个简单变量组成时,我们可以自己定义结构体,自己定义重载小于号,就像如下所示:
- struct ju
- {
- int x,y;
- bool operator <(const ju &a)const //排序并且去重复
- {
- if(a.x != x)
- return a.x >x;
- return a.y > y;
- }
- }tt;
但是这样需要自己定义结构体,有时在结构中需要定义构造函数,如果只有两个变量,我们可以通过pair类型来实现,这样显得简洁。
struct RatioComp {
bool operator() (const pair<int, int>& A, const pair<int, int>& B) {
if (A.first * B.second < A.second * B.first) {
return true;
} else if (A.first * B.second == A.second * B.first) {
return A.first < B.first;
} else {
return false;
}
}
};
set<pair<int,int>,RatioComp>S;
//RatioComp结构体中定义的构造函数就是set集合排序规则。
时间: 2024-10-20 03:56:58