Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyesuaikan Kriteria Perbandingan dalam set std:: Menggunakan Pembanding Tersuai?

Bagaimana untuk Menyesuaikan Kriteria Perbandingan dalam set std:: Menggunakan Pembanding Tersuai?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 17:25:10689semak imbas

How to Customize the Comparison Criteria in a std::set Using Custom Comparators?

Cara menggunakan Custom Comparator dengan std::set

Dalam artikel ini, kami menyediakan penyelesaian untuk menyesuaikan kriteria perbandingan dalam bekas std::set menggunakan pembanding tersuai .

Set std::set ialah koleksi tertib elemen unik dan secara lalai, ia menyusun elemen dalam menaik pesanan. Walau bagaimanapun, kita mungkin mahu menentukan logik perbandingan kita sendiri untuk mengubah tingkah laku ini. Mari kita terokai senario berikut di mana pembanding tersuai boleh berguna:

Senario: Susunan Leksikografi Tersuai

Dalam contoh yang disediakan, kami berhasrat untuk menukar susunan integer dalam std::set kepada leksikografik bukannya angka. Kami mentakrifkan fungsi pembanding tersuai lex_compare yang menukar setiap integer kepada perwakilan rentetan dan kemudian membandingkan rentetan. Walau bagaimanapun, kod ini gagal untuk disusun.

Penyelesaian

Ralat timbul kerana kod yang disediakan melepasi fungsi pembanding tersuai lex_compare sebagai hujah kepada templat std::set. Walau bagaimanapun, parameter templat kedua std::set menjangkakan jenis, bukan fungsi. Untuk menyelesaikan isu ini, kami boleh menggunakan pelbagai kaedah:

1. Menggunakan Fungsi Lambda sebagai Pembanding:

auto cmp = [](int64_t a, int64_t b) { return a < b; };
std::set<int64_t, decltype(cmp)> s;

Dalam C 20 dan kemudian, kita boleh terus menggunakan fungsi lambda sebagai pembanding. Lambda mengambil dua hujah (elemen setanding) dan mengembalikan boolean yang menunjukkan susunannya.

2. Menggunakan Fungsi sebagai Pembanding:

bool cmp(int64_t a, int64_t b) { return a < b; }
std::set<int64_t, decltype(&cmp)> s(&cmp);

Jika ungkapan lambda tidak diutamakan, kita boleh mentakrifkan fungsi boolean berasingan cmp dan menyerahkannya kepada pembina std::set. Ambil perhatian bahawa dalam kes ini, kami perlu menyediakan alamat-pengendali (&) untuk menghantar rujukan kepada fungsi tersebut.

3. Menggunakan Struct dengan Operator Panggilan Fungsi:

struct cmp {
    bool operator()(int64_t a, int64_t b) { return a < b; }
};

std::set<int64_t, cmp> s;

Pendekatan ini mentakrifkan struct dengan operator panggilan fungsi yang melaksanakan logik perbandingan. Struktur itu kemudiannya digunakan sebagai pembanding untuk set.

Dengan menggunakan teknik ini, kami boleh menyesuaikan gelagat pesanan std::set untuk memenuhi keperluan khusus dengan berkesan.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Kriteria Perbandingan dalam set std:: Menggunakan Pembanding Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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