我正在嘗試用C++語言編寫一個程序。如何用std :: set包含我的類
類邊緣指示ù之間的連接和v。
邊緣一指示,其指示V和U之間的連接u和v。一個邊緣」之間的連接。邊a和'表示相同的連接。所以,我想包含一個或一個'。
我知道「集合」存儲獨特的元素。所以我想用這個。我在下面定義了運算符<。
當我搜索錯誤時,我發現了一些錯誤。 (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;
}
謝謝!但是,我想包含一個(1,2) – 2011-12-16 05:25:47