两元素次序无关
#include <iostream>
#include <set>
using namespace std;
class Edge
{
public:
int u;
int v;
Edge(int u, int v): u(u), v(v){}
bool operator< (const Edge& e) const
{
bool result = true;
if( (u == e.u && v == e.v)||(v == e.u && u == e.v) )
{
result = false;
}
return result;
}
};
int main(int argc, char const *argv[])
{
std::set<Edge> edge_set2;
Edge edge_a(0, 1);
Edge edge_b(1, 0);
Edge edge_c(0, 3);
Edge edge_d(3, 0);
edge_set2.insert(edge_a);
edge_set2.insert(edge_b);
edge_set2.insert(edge_c);
edge_set2.insert(edge_d);
for (Edge str : edge_set2) {
cout << str.u << " "<< str.v<< endl;
}
return 0;
}
两元素有次序关系
#include <iostream>
#include <set>
using namespace std;
class Edge
{
public:
int u;
int v;
Edge(int u, int v): u(u), v(v){}
bool operator < (const Edge& edge) const
{
return this->u < edge.u;
} //为了方便起见设为public int u; int v;
};
class EdgeComp
{
public:
bool operator()(const Edge& left, const Edge& right)
{
return left.u < right.u;
}
};
int main(int argc, char const *argv[])
{
std::set<Edge> edge_set2;
Edge edge_a(0, 1);
Edge edge_b(1, 0);
edge_set2.insert(edge_a);
edge_set2.insert(edge_b);
for (Edge str : edge_set2) {
cout << str.u << " "<< str.v<< endl;
}
return 0;
}