Menggunakan Custom std::set Comparator
Pengenalan:
Dalam menyusun dan mencari algoritma , pembanding tersuai digunakan untuk menentukan susunan alternatif untuk elemen dalam bekas. Ini membolehkan pengisihan atau carian tersuai berdasarkan kriteria tertentu. Mari kita terokai cara mentakrifkan pembanding tersuai untuk bekas std::set.
Kajian Kes:
Pertimbangkan set integer yang anda inginkan susunan leksikografi dan bukannya angka memesan. Ini bermakna unsur "1234" dan "10000" harus dianggap teratur (secara leksikografi) walaupun "10000" lebih besar dari segi berangka.
Ralat dan Penyelesaian:
Ralat yang anda hadapi adalah kerana g menjangkakan pembanding yang mematuhi senarai parameter templat tertentu, khususnya "template
Penyelesaian:
Terdapat beberapa cara untuk menentukan pembanding tersuai untuk std ::set:
1. Penyelesaian C 20 Moden:
Dalam C 20 dan lebih baru, anda boleh menggunakan fungsi lambda sebagai pembanding terus:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s;
2. Penyelesaian C 11 Moden:
Dalam C 11 dan lebih baru, anda boleh menggunakan fungsi lambda dengan set pembina:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s(cmp);
3. Objek Fungsi:
Anda boleh mentakrifkan objek fungsi dengan fungsi operator() yang mengembalikan boolean:
struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; std::set<int, Compare> s;
4. std::integral_constant:
Anda boleh menggunakan std::integral_constant untuk mencipta jenis yang secara tersirat menukar kepada penunjuk fungsi:
#include <type_traits> struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; using Cmp = std::integral_constant<decltype(&Compare::operator()), &Compare::operator()>; std::set<int, Cmp> s;
Kesimpulan:
Dengan mentakrifkan pembanding tersuai, anda mempunyai lebih kawalan ke atas susunan elemen dalam set anda, membolehkan anda mencapai keperluan pengisihan khusus.
Atas ialah kandungan terperinci Bagaimana untuk Mentakrifkan Pembanding Tersuai untuk std::set Container?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!