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

Bagaimana untuk Mengisytiharkan Barisan Keutamaan dengan Pembanding Tersuai dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-10-24 14:05:02323semak imbas

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>

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.

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>

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!

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