Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyusun Set dengan Betul dengan Pembanding Tersuai dalam C?

Bagaimana untuk Menyusun Set dengan Betul dengan Pembanding Tersuai dalam C?

Barbara Streisand
Lepaskan: 2024-12-21 00:56:10
asal
1002 orang telah melayarinya

How to Correctly Compile a Set with a Custom Comparator in 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;
Salin selepas log masuk

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

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

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

4. Struktur dengan Operator():

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

std::set<int64_t, cmp> s;
Salin selepas log masuk

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

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!

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