के साथ मेरी कक्षा को कैसे शामिल करें मैं सी ++ भाषा में एक प्रोग्राम लिखने की कोशिश कर रहा हूं।std :: set
क्लास एज यू के बीच संबंध को इंगित करता है और वी।
एज एक जो जो वी और यू के बीच संबंध को इंगित करता है यू और वी। एज एक 'के बीच संबंध को दर्शाता है। एज ए और ए 'एक ही कनेक्शन इंगित करता है। तो, मैं या तो एक या एक 'रखना चाहता हूँ।
मुझे पता है कि "सेट" अद्वितीय तत्वों को स्टोर करता है। तो मैं इसका इस्तेमाल करना चाहता हूं। मैं नीचे ऑपरेटर < परिभाषित करता हूं।
जब मैं बग खोजता हूं, तो मुझे कुछ ट्रबल मिलते हैं। मैं स्टोर (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) –
@ user975352 रखना चाहता हूं, 'सेट' सामान्य रूप से डुप्लिकेट हटा देगा लेकिन यह नहीं हो सकता है कि आप अपने '<' ऑपरेटर को सही तरीके से परिभाषित नहीं करते हैं। –
यह सही नहीं है। @ user975352 नहीं चाहता (1,2), (2,1) सेट – Shawnone