आप अपने नोड प्रकार के लिए तुलना सक्षम करने के लिए कम-से ऑपरेटर निर्धारित करने होंगे:
struct Node
{
int a;
int b;
};
bool operator<(Node const& n1, Node const& n2)
{
// TODO: Specify condition as you need
return ... ;
}
यहाँ आप जाँच कर सकते हैं जो एक उपयोगकर्ता-निर्धारित प्रकार के लिए मतलब LessThan Comparable।
वैकल्पिक समाधान std::binary_function पर आधारित एक मजेदार को परिभाषित करना है। डिज़ाइन बिंदु दृश्य से, इस विकल्प के फायदे हैं क्योंकि तुलना Node
कक्षा से प्रभावी ढंग से decoupled है। इससे विभिन्न तुलना स्थितियों (मज़ेदार) के साथ विशेष मानचित्रों को परिभाषित करना संभव हो जाता है।
#include <map>
struct Node
{
int a;
int b;
};
struct NodeLessThan
: public std::binary_function<Node, Node, bool>
{
bool operator() (Node const& n1, Node const& n2) const
{
// TODO: your condition
return n1.a < n2.a;
}
};
int main()
{
Node node;
node.a = 2;
node.b = 3;
typedef std::map<Node, int, NodeLessThan> node_map_t;
node_map_t bb;
bb[node] = 1;
}
तो, आप अलग अलग परिस्थितियों या Node::a
एक और दोनों घटकों, Node::a
और Node::b
तुलना करके केवल एक का उपयोग कर की तुलना सिर्फ NodeLessThan
की तुलना में अधिक तुलना, उदाहरण के लिए परिभाषित कर सकते हैं। फिर, नक्शे के विभिन्न प्रकार परिभाषित:
typedef std::map<Node, int, NodeLessThan> node_map_t;
typedef std::map<Node, int, NodeLessThanByA> node_map_a_t;
इस तरह के decoupling कम दखल है (बिल्कुल नोड वर्ग स्पर्श नहीं करता है) और अधिक विस्तृत समाधान प्राप्त करने के लिए फायदेमंद है।
के लिए वोटिंग सभी को धन्यवाद! मुझे नहीं लगता था कि मानचित्र की तुलना की आवश्यकता है। – sevity
@Steve और भी सटीक होने के लिए, पॉइंटर्स तुलनात्मक नहीं हो सकते हैं <- यह निर्भर करता है कि वे क्या इंगित करते हैं। –
हां, मेरा मतलब क्या था, "उसी प्रकार के पॉइंटर्स सामान्य रूप से' <'" के साथ तुलनीय नहीं हैं। उसी ऑब्जेक्ट/सरणी के विभिन्न हिस्सों के पॉइंटर्स तुलनीय हैं, और उस मामले के लिए यदि कार्यान्वयन ऐसा कहता है तो सभी पॉइंटर्स तुलनीय हो सकते हैं। –