2013-11-27 22 views
7

मेरे पास vector<data> है (जहां data मेरा पालतू पालतू प्रकार है) और मैं इसका अधिकतम मूल्य ढूंढना चाहता हूं।सी ++ 11 में, मैं एक वेक्टर पर std :: max कैसे कॉल कर सकता हूं?

सी ++ 11 आइटम दिखाई देता है मानक std::max समारोह वस्तुओं का संग्रह पर काम करने की है, लेकिन यह इसके पहले तर्क के रूप में एक प्रारंभकर्ता सूची, नहीं vector की तरह एक संग्रह चाहता है:

vector<data> vd; 
std::max(vd); // Compilation error 
std::max({vd[0], vd[1], vd[2]}); // Works, but not ok since I don't vd.size() at compile time 

मैं कैसे हल कर सकते हैं इस ?

उत्तर

18

std::max ओवरलोड केवल संकलित समय पर ज्ञात छोटे सेट के लिए हैं। आपको क्या चाहिए std::max_element (जो प्री -11 भी है)।

auto max_iter = std::max_element(vd.begin(), vd.end()); 
// use *max_iter as maximum value (if vd wasn't empty, of course) 
1
शायद अधिक लचीलेपन

vector<data> vd; 

auto it = max_element(vd.cbegin(), vd.cend(), [](const data& left, const data& right) 
    { 
    return (left < right); 
    }); 

तुम सिर्फ अपने प्रकार "डाटा" के लिए तुलना के ऑपरेटर को लागू करना चाहिए लैम्ब्डा साथ

: यह एक संग्रह की अधिकतम तत्व को एक इटरेटर (या किसी भी इटरेटर रेंज) रिटर्न data::operator <()

+0

के माध्यम से क्यों नहीं 'लौट left.some_data paceholder

+0

बुरा नहीं है, मैं अपने कोड के ऊपर ठीक कर देंगे – angevad

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