在写算法时,经常会用到vector容器和自定义结构体struct,用vector容器保存struct结构体时,都不会出现啥问题(试了map也没问题)
#include <bits/stdc++.h>
using namespace std;
struct Node{
int x,y;
Node(){}
Node(int _x,int _y):x(_x),y(_y){}
};
vector<Node> v;
map<int,Node> m;
int main()
{
v.push_back(Node(1,2));
m[0]=Node(1,2);
cout<<v[0].x<<" "<<v[0].y<<endl;
cout<<m[0].x<<" "<<m[0].y<<endl;
return 0;
}
但是当使用到set集合时,就会出现报错,其实问题也不大,一查就知道了,需要重载 < 运算符,下面给出解释
定义: 之所以称为集合,就是因为set与数学中的集合一样,存在互异性,也就是每一个元素只允许出现一次。set的特性是:所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。自己写的类型,需要重新定义<的意义。
#include <bits/stdc++.h>
using namespace std;
struct Node{
int x,y;
Node(){}
Node(int _x,int _y):x(_x),y(_y){}
bool operator<(const Node &n)const//const一定要写
{
return x<n.x;//根据自己需要来写
}
};
set<Node> s;
int main()
{
s.insert(Node(1,2));
cout<<s.size()<<endl;
return 0;
}