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!