Cara Menyusun Vektor Pasangan Secara Cekap Mengikut Elemen Kedua Pasangan
Artikel ini membincangkan persoalan mengisih vektor pasangan berdasarkan elemen kedua setiap pasangan dalam tertib menaik. Semasa mencipta objek fungsi tersuai untuk tugas ini ialah penyelesaian yang berdaya maju, terdapat kaedah alternatif yang menggunakan komponen STL sedia ada dan std::less.
Menggunakan std::sort dengan Custom Comparator
Satu pendekatan ialah menggunakan pembanding tersuai sebagai hujah ketiga pilihan untuk std::sort. Pembanding tersuai ini, dipanggil sort_pred, ditakrifkan seperti berikut:
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
Untuk menggunakan pembanding ini, hantarkan sahaja ke std::sort:
std::sort(v.begin(), v.end(), sort_pred());
Menggunakan C 11 Lambdas
Jika menggunakan pengkompil C 11, anda boleh memanfaatkan lambdas sebagai ganti pembanding tersuai:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
Menggunakan Templat Generik untuk Isih Berpasangan
Untuk lebih fleksibiliti dan kebolehgunaan semula, anda boleh mencipta templat generik yang dipanggil sort_pair_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); } };
Dengan templat ini, anda boleh mencapai pengisihan yang diingini sebagai berikut:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
Atas ialah kandungan terperinci Bagaimana untuk Menyusun Vektor Pasangan mengikut Elemen Kedua dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!