Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengisih Vektor Pasangan dalam C Berdasarkan Elemen Kedua?

Bagaimana Mengisih Vektor Pasangan dalam C Berdasarkan Elemen Kedua?

Linda Hamilton
Lepaskan: 2024-12-16 21:31:12
asal
1004 orang telah melayarinya

How to Sort a Vector of Pairs in C   Based on the Second Element?

Mengisih Vektor Pasangan Berdasarkan Elemen Kedua

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.

Menggunakan C 14 Lambdas

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;
});
Salin selepas log masuk

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.

Menggunakan Pembanding Tersuai

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());
Salin selepas log masuk

Struktur sort_pred melaksanakan operator perbandingan, membandingkan elemen kedua daripada dua pasangan dan kembali benar jika elemen pasangan kiri adalah kurang daripada kanan.

Menggunakan Pembanding Templat

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);
    }
};
Salin selepas log masuk

Dengan templat ini, kami kini boleh mengisih menggunakan:

std::sort(vec.begin(), vec.end(), sort_pair_second<int, int>());
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan