Я пытаюсь написать программу на языке C ++.
Граница класса указывает связь между u и v.
Граница a, которая указывает связь между u и v. Edge a ', которая указывает связь между v и u. Края a и a 'указывают на одно и то же соединение. Итак, я хочу содержать либо a, либо a '.
Я знаю, что «набор» хранит уникальные элементы. Итак, я хочу использовать это. Я определяю operator <ниже.
Когда я ищу ошибки, я обнаружил некоторые проблемы. Я сохраняю (1,2) -> (1,2) -> (2,1) -> (3,2) -> (2,3) -> (5,2).
Но набор магазинов
1 2
5 2
3 2
1 2 <-- Why ????
Не могли бы вы мне помочь ??
#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;
}