Estoy tratando de escribir un programa en lenguaje C++.Cómo contener mi clase con std :: set
EDGE clase indica la conexión entre u y v.
Edge una que indica la conexión entre u y v. Borde de un' que indica la conexión entre v y u. Edge a y a 'indican la misma conexión. Entonces, quiero contener ya sea a o a '.
Sé que "set" almacena elementos únicos. Entonces quiero usar esto. Defino el operador < a continuación.
Cuando busco errores, encontré algunos trubles. Almacenar (1,2) -> (1,2) -> (2,1) -> (3,2) -> (2,3) -> (5,2).
Pero establecidos tiendas
1 2
5 2
3 2
1 2 <-- Why ????
¿podría ayudarme ??
#include<iostream>
#include<set>
class Edge {
private:
int u, v;
public:
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;
}
std::pair<int, int> pair() const {
return std::pair<int, int>(u, v);
}
Edge(int u_, int v_) : u(u_), v(v_) {}
};
int main(void) {
std::set<Edge> edge;
std::set<Edge>::iterator eit;
edge.insert(Edge(1,2)); // <-- (1,2) can be contained.
edge.insert(Edge(1,2)); // <-- (1,2) doesn't have to be contained.
edge.insert(Edge(2,1)); // <-- (2,2) doesn't have to be contained.
edge.insert(Edge(3,2)); // <-- (3,2) can be contained.
edge.insert(Edge(2,3)); // <-- (2,3) doesn't have to be contained.
edge.insert(Edge(5,2)); // <-- (5,2) doesn't have to be contained.
edge.insert(Edge(1,2)); // <-- (1,2) doesn't have to be contained. But edge contains this. Why?
for(eit = edge.begin(); eit != edge.end(); eit++) {
std::cout << (*eit).pair().first << " " << (*eit).pair().second << std::endl;
}
return 0;
}
¡Gracias! Pero, quiero contener uno (1,2) –
@ user975352, 'set' normalmente eliminará duplicados, pero no puede si no define correctamente su operador' <'. –
Esto no es correcto. @ user975352 no quiere (1,2), (2,1) están ambos en el conjunto – Shawnone