set中插入结构体数组(或者被结构体定义的数),谨记重载运算符<
写了一道关于离散的题目,想在set中插入结构体数组,发现报错
搜了搜网上资料 发现要自己重载c++中原本的<运算符
(个人猜测是因为set中往往插入一个元素,因此原本的<不适用了,需要进行重载,等下再去查查资料)
#include<iostream>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#include<set>
const int N = 100010;
int n, m;
using namespace std;
struct Pair
{
int x;
int y;
};
bool operator<(Pair x, Pair y)//对<运算符 重载
{
//按照想要的顺序,自定义运算符
//类似:对插入set的结构体数组自定义排序
if (x.x < y.x)return true;
if (x.x == y.x&&x.y < y.y)return true;
return false;
}
int main()
{
set<Pair>st;
Pair a[N];
while (cin >> n >> m)
{
for (int i = 0; i < m; i++)
{
cin >> a[i].x >> a[i].y;
st.insert(a[i]);
}
int i;
int ans = 0;
for (i = 1; i <= n; i++)
{
auto it = st.begin();
for (it; it != st.end(); it++)
{
if (it->x == i && it->y == i)//如果找到就可以退出
{
ans++;
break;
}
}
}
if (ans == n)cout << "yes" << endl;
else
cout << "no" << endl;
st.clear(); ans = 0;
}
}