2013-09-30 14 views
5

मुझे लगता है कि आप उपयोगकर्ता परिभाषित कक्षा को std::vector में डाल सकते हैं और फिर सॉर्टिंग तंत्र को अधिभारित कर सकते हैं ताकि यह किसी विशेष डेटा सदस्य से तुलना हो। हालांकि, आप std::vector<MyClass> को कैसे क्रमबद्ध करेंगे जहां MyClass में दो डेटा सदस्य हैं और आप दूसरे डेटा सदस्य पर सॉर्टिंग का "दूसरा स्तर" जोड़ना चाहते हैं? तो डेटा सदस्य a पर क्रमबद्ध करें और जहां a बराबर है, फिर डेटा सदस्य b पर सॉर्ट करें?सी ++ दो डेटा सदस्यों के आधार पर सॉर्टिंग ऑब्जेक्ट्स

+0

छँटाई तंत्र ओवरलोडिंग आप दो वस्तुओं पर मनमाने ढंग से कोड को निष्पादित करने की अनुमति देता है तुलना की जा रही का उपयोग करेगा। आप जितना चाहें उतने "स्तर" को जोड़ने में सक्षम होना चाहिए। –

+0

जैसा कि आप इसे एक सदस्य की तुलना के लिए करेंगे। मैं सुझाव देता हूं कि पहले ऐसा कैसे करें (एसओ पर इसके बारे में कई प्रश्न हैं), फिर बस उस मज़ेदार को संशोधित करें जिसे आपने दूसरे सदस्य की तुलना में लिखने के लिए लिखा था यदि पहला बराबर है। – us2012

उत्तर

9

std::tuple

#include <tuple> 
    //..  
    struct comp 
    { 
     bool operator()(const MyClass& lhs, const MyClass& rhs) const 
     { 
     return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b); 
     } 
    }; 

उपयोग कर एक कस्टम तुलनित्र बनाएं यह a पहले और उसके बाद b दूसरा

संबंधित मुद्दे