Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengisytiharkan Barisan Keutamaan dengan Pembanding Tersuai dalam C ?

Bagaimana untuk Mengisytiharkan Barisan Keutamaan dengan Pembanding Tersuai dalam C ?

Patricia Arquette
Lepaskan: 2024-10-24 14:05:02
asal
403 orang telah melayarinya

How to Correctly Declare a Priority Queue with a Custom Comparator in C  ?

Mengisytiharkan Baris Keutamaan dalam C dengan Pembanding Tersuai

Apabila bekerja dengan baris gilir keutamaan dalam C , seseorang mungkin menghadapi ralat semasa cuba mengisytiharkannya dengan fungsi pembanding tersuai. Mari kita terokai sebab di sebalik ralat ini dan ketahui cara yang betul untuk mengisytiharkan baris gilir keutamaan dengan pembanding tersuai.

Pengisytiharan Salah: Punca dan Penyelesaian

Seperti yang anda nyatakan, cuba mengisytiharkan keutamaan baris gilir dengan kod berikut mencetuskan ralat:

<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>
Salin selepas log masuk

Sebab ralat pertama ("Bandingkan bukan nama jenis") ialah Bandingkan dijangkakan sebagai jenis, khususnya kelas yang mengatasi pengendali () fungsi. Untuk menyelesaikan masalah ini, anda perlu mencipta kelas yang dipanggil Bandingkan dan bebankan operator() di dalamnya.

Ralat kedua ("dijangka >'") berlaku apabila fungsi Bandingkan` tidak dinyatakan dengan betul sebagai menaip. Untuk membetulkannya, ubah suai pengisytiharan kepada:

<code class="cpp">priority_queue<Node, vector<Node>, Compare::Compare> openSet;</code>
Salin selepas log masuk

Di sini, Bandingkan::Bandingkan secara eksplisit menentukan fungsi operator() dalam kelas Bandingkan.

Pilihan Pengisytiharan Alternatif

Terdapat cara alternatif untuk mengisytiharkan baris gilir keutamaan dengan pembanding tersuai:

Menggunakan std::function:

<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet(Compare);</code>
Salin selepas log masuk

Menggunakan decltype dan Lambda Ungkapan:

<code class="cpp">decltype(Compare) myComparator = Compare;
priority_queue<Node, vector<Node>, decltype(Compare)> openSet(myComparator);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengisytiharkan Barisan Keutamaan dengan Pembanding Tersuai dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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