EDIT : c ++ 14 का उपयोग करते हुए, सबसे अच्छा समाधान लैम्ब्डा के लिए धन्यवाद लिखना बहुत आसान है जो अब प्रकार के पैरामीटर हो सकते हैं auto
। यह मेरा वर्तमान पसंदीदा समाधान है
std::sort(v.begin(), v.end(), [](auto &left, auto &right) {
return left.second < right.second;
});
बस एक कस्टम तुलनित्र का उपयोग करें (यह एक वैकल्पिक 3 तर्क है std::sort
)
struct sort_pred {
bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
}
};
std::sort(v.begin(), v.end(), sort_pred());
यदि आप C ++ 11 संकलक का उपयोग कर रहे हैं, तो आप लैम्बदास का उपयोग करके लिख सकते हैं:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
});
संपादित करें : आपके प्रश्न के सम्पादन के जवाब में, यहाँ कुछ विचार दिए गए हैं ... यदि आप वास्तव में रचनात्मक होना चाहते हैं और इस अवधारणा का बहुत अधिक उपयोग करने में सक्षम हैं, तो बस एक टेम्पलेट बनाएं:
template <class T1, class T2, class Pred = std::less<T2> >
struct sort_pair_second {
bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) {
Pred p;
return p(left.second, right.second);
}
};
तो आप यह भी कर सकते हैं:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
या और भी
std::sort(v.begin(), v.end(), sort_pair_second<int, int, std::greater<int> >());
हालांकि ईमानदार होने के लिए, यह सब थोड़ा अधिक है, बस 3 लाइन फ़ंक्शन लिखें और इसके साथ किया जाए :-P