সম্পাদনা করুন : সি ++ 14 ব্যবহার করে, ল্যাম্বডাসকে ধন্যবাদ লেখার জন্য সেরা সমাধানটি খুব সহজ যা এখন টাইপের পরামিতি থাকতে পারে auto। এটি আমার বর্তমান প্রিয় সমাধান
std::sort(v.begin(), v.end(), [](auto &left, auto &right) {
return left.second < right.second;
});
কেবলমাত্র একটি কাস্টম তুলক ব্যবহার করুন (এটি একটি 3rdচ্ছিক তৃতীয় যুক্তি 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 লাইন ফাংশনটি লিখুন এবং এটি দিয়ে সম্পন্ন করুন :- পি