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
904 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!

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