综述
自定义Edge/Face数据结构 set定义元素比较次序
代码
Face.cpp
#include <set>
#include <iostream>
using namespace std;
class Face
{
public:
//the three points
int u;
int v;
int k;
Face()=default;
Face(int u, int v, int k): u(u), v(v),k(k){}
bool operator< (const Face& e) const
{
bool result = true;
if( (u == e.u && v == e.v && k == e.k)||
(u == e.u && v == e.k && k == e.v )||
(u == e.v && v == e.u && k == e.k )||
(u == e.v && v == e.k && k == e.u )||
(u == e.k && v == e.u && k == e.v )||
(u == e.k && v == e.v && k == e.u ))
{
result = false;
}
return result;
}
};
set<Face> fcon;
int main(int argc, char const *argv[])
{
Face f1(1,2,3);
Face f2(1,3,2);
Face f3(2,1,3);
Face f4(2,3,1);
Face f5(3,1,2);
Face f6(3,2,1);
fcon.insert(f1);
fcon.insert(f2);
fcon.insert(f3);
fcon.insert(f4);
fcon.insert(f5);
fcon.insert(f6);
cout << fcon.size() << endl;
return 0;
}
Edge.cpp
#include <iostream>
#include <set>
using namespace std;
class Edge
{
public:
int u;
int v;
Edge()=default;
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;
}