Dalam C , kita boleh menghadapi situasi di mana kita perlu mengisih vektor pasangan berdasarkan elemen kedua. Mari kita terokai cara untuk mencapai ini dengan mudah menggunakan maklumat yang disediakan.
Vektor pasangan yang disediakan, vec, memegang pasangan integer dan kami ingin mengisihnya dalam tertib menaik berdasarkan elemen kedua setiap pasangan. Tanpa menggunakan objek fungsi tersuai, mari memanfaatkan perpustakaan templat standard (STL) dan std::less untuk melakukan kerja.
Penyelesaian paling mudah dalam C 14 memanfaatkan lambdas dengan inferens jenis parameter:
std::sort(vec.begin(), vec.end(), [](auto &left, auto &right) { return left.second < right.second; });
Lambda tanpa nama ini menangkap sebelah kiri dan pasangan kanan dan kembali benar jika elemen kedua kiri kurang daripada kanan, mengisih vektor dengan berkesan dalam tertib menaik.
Jika lambdas bukan pilihan, kami boleh mentakrifkan pembanding tersuai untuk mengendalikan pengisihan:
struct sort_pred { bool operator()(const std::pair<int, int> &left, const std::pair<int, int> &right) { return left.second < right.second; } }; std::sort(vec.begin(), vec.end(), sort_pred());
Struktur sort_pred melaksanakan operator perbandingan, membandingkan elemen kedua daripada dua pasangan dan kembali benar jika elemen pasangan kiri adalah kurang daripada kanan.
Untuk menyamaratakan pembanding dan menggunakannya semula untuk pengisihan, kita boleh mencipta templat:
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, kami kini boleh mengisih menggunakan:
std::sort(vec.begin(), vec.end(), sort_pair_second<int, int>());
Dengan menyediakan hujah templat, kami menentukan jenis elemen pasangan dan malah boleh menyesuaikan perbandingan menggunakan predikat berbeza seperti std::greater untuk tertib menurun.
Atas ialah kandungan terperinci Bagaimana Mengisih Vektor Pasangan dalam C Berdasarkan Elemen Kedua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!