Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mentakrifkan Pembanding Tersuai untuk std::set Container?

Bagaimana untuk Mentakrifkan Pembanding Tersuai untuk std::set Container?

Susan Sarandon
Susan Sarandonasal
2024-12-17 10:37:25809semak imbas

How to Define a Custom Comparator for the std::set Container?

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 class std::set". Dalam kod anda, "lex_compare" bukan jenis yang boleh memenuhi peranan _Compare.

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!

Kenyataan:
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