2015-06-03 18 views
5

मैं std :: नक्शे से अधिकतम मूल्य के साथ तत्व प्राप्त करने के लिए कोशिश कर रहा हूँ के साथ तत्व मिल जाए,एसटीडी से अधिकतम मूल्य :: नक्शा

int main() { 
    map<int, int> m; 
    m[1] = 100; 
    m[2] = -1; 

    auto x = std::max_element(m.begin(), m.end(), m.value_comp()); 

    cout << x->first << " : " << x->second << endl; 
} 

कारण है कि यह दूसरा तत्व 2 : -1 प्रिंट?

+0

हम्म ... के साथ संकलित करना होगा ... std :: max_element() 'मानचित्र की कुंजी की तुलना करना प्रतीत होता है – Levi

+1

http: //en.cppreference .com/w/cpp/कंटेनर/मानचित्र/value_comp – juanchopanza

उत्तर

9

here से लिया:

auto x = std::max_element(m.begin(), m.end(), 
    [](const pair<int, int>& p1, const pair<int, int>& p2) { 
     return p1.second < p2.second; }); 

यह है, बजाय std::map::value_comp() का उपयोग कर (जो कुंजी मान तुलना) जोड़ी है, जो मान में second सदस्य पर लग रहा है। यह लैम्ब्डा अभिव्यक्ति का उपयोग करता है, इसलिए आपको सी ++ 11 समर्थन

+1

मैं इस उत्तर से सहमत हूं। हालांकि, यह थोड़ा और सामान्य लिखा जा सकता है। यदि आप जानते हैं कि 'एम' प्रकार' एम' है, तो आप '[] (const M :: value_type & p1, const m :: value_type और p2) लिख सकते हैं। 'एम' में परिवर्तन टाइप करना मजबूत है लेकिन यहां एक अनावश्यक संकेत है – IceFire

2

http://www.cplusplus.com/reference/map/map/value_comp/

Returns a comparison object that can be used to compare two elements to get whether 
the key of the first one goes before the second. 

और 2> 1. value_compकुंजी मूल्यों, नहीं मूल्य मूल्यों तुलना करती है। क्योंकि सी ++ रोल कैसे है।

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