Antrian prioritas stl default adalah Max (Fungsi atas mengembalikan elemen terbesar).
Katakan, untuk kesederhanaan, itu adalah antrian prioritas dari nilai int.
c++
stl
priority-queue
amitlicht.dll
sumber
sumber
operator>
, yang akan bekerja seperti pesonastd::greater
. Anda juga dapat menulis functor Anda sendiri daripadastd::greater
jika Anda suka.operator<
;)vector
dandeque
memenuhi persyaratan yang harus dipenuhi oleh container yang mendasari untuk sebuah priority_queue. Anda juga dapat menggunakan kelas penampung khusus. Anda dapat menemukan penjelasan yang lebih rinci di cplusplus.com/reference/queue/priority_queueSalah satu caranya adalah dengan menentukan komparator yang cocok untuk beroperasi pada antrian prioritas biasa, sehingga prioritasnya dibalik:
Yang akan menghasilkan masing-masing 1, 3, 5, 8.
Beberapa contoh penggunaan antrian prioritas melalui implementasi STL dan Sedgewick diberikan di sini .
sumber
Parameter kerangka ketiga untuk
priority_queue
adalah pembanding. Setel untuk digunakangreater
.misalnya
Anda harus
#include <functional>
untukstd::greater
.sumber
Anda dapat melakukannya dengan berbagai cara:
1. Menggunakan
greater
sebagai fungsi perbandingan:2. Memasukkan nilai dengan mengubah tandanya (menggunakan minus (-) untuk bilangan positif dan menggunakan plus (+) untuk bilangan negatif:
3. Menggunakan struktur atau kelas khusus:
4. Menggunakan struktur atau kelas kustom, Anda dapat menggunakan priority_queue dalam urutan apa pun. Misalkan, kita ingin mengurutkan orang-orang menurut gajinya dan jika seri menurut usianya.
Hasil yang sama dapat diperoleh dengan kelebihan beban operator:
Dalam fungsi utama:
sumber
bool operator > (const people & p)const
dalam 5) kelebihan operator<
kelebihan beban seperti itu, lebih baik membebani>
dan menggunakangreater<people>
Di C ++ 11 Anda juga bisa membuat alias untuk kenyamanan:
Dan gunakan seperti ini:
sumber
Salah satu cara untuk mengatasi masalah ini adalah, tekan negatif setiap elemen di priority_queue sehingga elemen terbesar akan menjadi elemen terkecil. Pada saat membuat operasi pop, ambil negasi dari setiap elemen.
sumber
Berdasarkan semua jawaban di atas, saya membuat kode contoh cara membuat antrian prioritas. Catatan: Ia bekerja pada kompiler C ++ 11 dan di atasnya
Output dari kode Di Atas
sumber
Kami dapat melakukan ini dengan beberapa cara.
Menggunakan parameter pembanding template
Menggunakan kelas kompartor yang ditentukan bekas
sumber