मैं std :: मानचित्र के लिए एक कुंजी के रूप में एक कस्टम प्रकार असाइन करने का प्रयास कर रहा हूं। यहां वह प्रकार है जिसे मैं कुंजी के रूप में उपयोग कर रहा हूं।मानचित्र के लिए कुंजी के रूप में कस्टम प्रकार - सी ++
struct Foo
{
Foo(std::string s) : foo_value(s){}
bool operator<(const Foo& foo1) { return foo_value < foo1.foo_value; }
bool operator>(const Foo& foo1) { return foo_value > foo1.foo_value; }
std::string foo_value;
};
जब std :: नक्शा, मैं निम्न त्रुटि हो रही है के साथ प्रयोग किया।
error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const Foo' (or there is no acceptable conversion) c:\program files\microsoft visual studio 8\vc\include\functional 143
यदि मैं नीचे की तरह संरचना बदलता हूं, तो सबकुछ काम करता है।
struct Foo
{
Foo(std::string s) : foo_value(s) {}
friend bool operator<(const Foo& foo,const Foo& foo1) { return foo.foo_value < foo1.foo_value; }
friend bool operator>(const Foo& foo,const Foo& foo1) { return foo.foo_value > foo1.foo_value; }
std::string foo_value;
};
कुछ भी नहीं दोस्त के रूप में ऑपरेटर भार के बनाने को छोड़कर बदल दिया है। मैं सोच रहा हूं कि मेरा पहला कोड क्यों काम नहीं कर रहा है?
कोई विचार?
धन्यवाद। वह चाल है। –
क्या आप अधिक जानकारी में जा सकते हैं? आपको ऑपरेटर की आवश्यकता क्यों है <और ऑपरेटर == या ऑपरेटर नहीं? – bobobobo
क्योंकि आप ऑपरेटर से ऑपरेटर> और ऑपरेटर == प्राप्त कर सकते हैं <। '(बी <ए) 'का अर्थ है' (ए> बी) ', इसलिए ऑपरेटर है>। और, '(! (ए <बी) &&! (बी <ए))' का अर्थ है कि बी से कम नहीं है और न ही बी से बड़ा है, इसलिए यह बी के बराबर होना चाहिए। – skrebbel