Isih Tersuai Vektor Pasangan
Pertimbangkan senario di mana anda ingin mengisih vektor pasangan (
Untuk mencapai ini tanpa melaksanakan objek fungsi yang berasingan, anda boleh menggunakan parameter ketiga
std ::sort, yang menerima pembanding tersuai. Pembanding ini membandingkan dua pasangan berdasarkan elemen kedua mereka menggunakan pembanding yang disediakan.
Sebagai contoh, menggunakan pengkompil C 11, anda boleh mentakrifkan pembanding dengan ungkapan lambda:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
Sebagai alternatif , tentukan struct tersuai yang membebankan
operator()fungsi untuk melaksanakan perbandingan:
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());
Jika anda inginkan penyelesaian generik yang boleh digunakan semula dengan jenis dan pembanding yang berbeza, cipta templat seperti ini:
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); } };
Dengan templat ini, anda boleh mengisih pasangan menggunakan mana-mana pembanding tersuai:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
Atas ialah kandungan terperinci Bagaimana untuk Menyisih Vektor Pasangan Berdasarkan Elemen Kedua dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!