Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyusun Set dengan Betul dengan Pembanding Tersuai dalam C?
Set Penyusunan dengan Pembanding Tersuai
Apabila cuba mencipta set integer yang disusun mengikut perbandingan leksikografi dan bukannya angka, isu boleh timbul apabila menyusun dengan g .
Ralat yang dihadapi adalah disebabkan oleh jenis parameter templat yang salah untuk set. Dalam kod yang disediakan:
set<int64_t, lex_compare> s;
lex_compare bukan jenis tetapi fungsi. Untuk membetulkannya, kita perlu mencipta objek pembanding mengikut keperluan templat C.
Penyelesaian C Moden
1. Penyelesaian C 20:
auto cmp = [](int64_t a, int64_t b) { return ... }; std::set<int64_t, decltype(cmp)> s;
Lambdas boleh digunakan sebagai pembanding dalam C 20. Lambda harus mengembalikan nilai boolean yang menunjukkan susunan unsur.
2 . Penyelesaian C 11:
auto cmp = [](int64_t a, int64_t b) { return ... }; std::set<int64_t, decltype(cmp)> s(cmp);
Dalam C 11, lambda mesti dihantar sebagai hujah kepada pembina set.
Penyelesaian Tradisional
3. Penunjuk Fungsi:
bool cmp(int64_t a, int64_t b) { return ...; } std::set<int64_t, decltype(cmp)*> s(cmp);
4. Struktur dengan Operator():
struct cmp { bool operator() (int64_t a, int64_t b) const { return ... } }; std::set<int64_t, cmp> s;
5. Struktur daripada Fungsi Boolean:
bool cmp(int64_t a, int64_t b) { return ...; } #include <type_traits> using Cmp = std::integral_constant<decltype(&cmp), &cmp>; std::set<int64_t, Cmp> set;
Atas ialah kandungan terperinci Bagaimana untuk Menyusun Set dengan Betul dengan Pembanding Tersuai dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!