Rumah > pembangunan bahagian belakang > C++ > Mengapa Pembanding `std::set` Tersuai Saya Menyebabkan Ralat Tidak Padan Jenis?

Mengapa Pembanding `std::set` Tersuai Saya Menyebabkan Ralat Tidak Padan Jenis?

Susan Sarandon
Lepaskan: 2024-12-23 14:11:17
asal
978 orang telah melayarinya

Why Does My Custom `std::set` Comparator Cause a Type Mismatch Error?

Ralat: Jenis Tidak Padan dalam Custom std::set Definisi Pembanding

Dalam kod anda, anda cuba untuk menentukan fungsi pembanding tersuai untuk mengisih elemen dalam std :: tetapkan menggunakan susunan leksikografi dan bukannya susunan angka. Walau bagaimanapun, mesej ralat menunjukkan bahawa terdapat ralat tidak padan jenis dalam pengisytiharan pembanding tersuai anda.

Isu timbul kerana anda mengisytiharkan lex_compare sebagai fungsi dengan dua parameter int64_t yang mengembalikan nilai boolean. Walau bagaimanapun, templat untuk std::set menjangkakan pembanding yang melaksanakan std::less<> templat. std::kurang<> ialah objek fungsi dengan tandatangan berikut:

template <typename T>
struct less {
  bool operator()(const T& a, const T& b) const;
};
Salin selepas log masuk

Untuk menyelesaikan isu ini, anda perlu melaksanakan lex_compare untuk mematuhi std::less<> tandatangan. Berikut ialah pengubahsuaian pada kod anda:

struct lex_compare {
  bool operator()(const int64_t& a, const int64_t& b) const {
    stringstream s1, s2;
    s1 << a;
    s2 << b;
    return s1.str() < s2.str();
  }
};

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

Kini, struct lex_compare melaksanakan fungsi operator() yang mengambil dua argumen int64_t dan mengembalikan nilai boolean, yang sepadan dengan tandatangan std::less<> . Dengan menyatakan pembanding tersuai ini dalam takrifan std::set anda, anda boleh mengubah suai gelagat susunan set untuk mengisih unsur secara leksikografi.

Atas ialah kandungan terperinci Mengapa Pembanding `std::set` Tersuai Saya Menyebabkan Ralat Tidak Padan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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