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

Bagaimana untuk Menyisih Vektor Pasangan Berdasarkan Elemen Kedua dalam C ?

DDD
Lepaskan: 2024-12-13 12:12:10
asal
515 orang telah melayarinya

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

Isih Tersuai Vektor Pasangan

Pertimbangkan senario di mana anda ingin mengisih vektor pasangan (std:: vektor>) berdasarkan elemen kedua setiap pasangan dalam susunan yang semakin meningkat.

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

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

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

Dengan templat ini, anda boleh mengisih pasangan menggunakan mana-mana pembanding tersuai:

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan