Tôi đang cố gắng viết một chương trình bằng ngôn ngữ C++.Làm thế nào để chứa lớp học của tôi với std :: set
Lớp Cạnh chỉ ra mối liên hệ giữa u và v.
cạnh một mà chỉ ra mối liên hệ giữa u và v. Cạnh một' mà chỉ ra mối liên hệ giữa v và u. Cạnh a và một 'chỉ ra cùng một kết nối. Vì vậy, tôi muốn chứa một hoặc một '.
Tôi biết "đặt" lưu trữ các yếu tố độc đáo. Vì vậy, tôi muốn sử dụng điều này. Tôi xác định toán tử < bên dưới.
Khi tôi tìm kiếm lỗi, tôi đã tìm thấy một số trubles. Tôi lưu trữ (1,2) -> (1,2) -> (2,1) -> (3,2) -> (2,3) -> (5,2).
Nhưng thiết lập cửa hàng
1 2
5 2
3 2
1 2 <-- Why ????
Ông có thể giúp tôi ??
#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;
}
Cảm ơn bạn! Nhưng, tôi muốn chứa một (1,2) –
@ user975352, 'bộ' thường sẽ loại bỏ các bản sao nhưng không thể nếu bạn không xác định toán tử' <'của bạn đúng cách. –
Điều này không chính xác. @ user975352 không muốn (1,2), (2,1) đều nằm trong bộ – Shawnone