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.
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>
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>
Di sini, Bandingkan::Bandingkan secara eksplisit menentukan fungsi operator() dalam kelas Bandingkan.
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>
Menggunakan decltype dan Lambda Ungkapan:
<code class="cpp">decltype(Compare) myComparator = Compare; priority_queue<Node, vector<Node>, decltype(Compare)> openSet(myComparator);</code>
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!