Untuk menggunakan C ++ priority_queue, program harus dimulakan dengan kod seperti:
#sertakan#sertakan
menggunakan ruang nama std;
Ia merangkumi perpustakaan antrian ke dalam program.
Untuk terus membaca, pembaca semestinya mempunyai pengetahuan asas mengenai C++.
Kandungan Artikel
- Pengenalan - lihat di atas
- Pembinaan Asas
- Fungsi Anggota Penting
- Fungsi Baris Keutamaan Lain
- Data Rentetan
- Pembinaan Baris Keutamaan Lain
- Kesimpulannya
Pembinaan Asas
Struktur data harus dibina terlebih dahulu sebelum dapat digunakan. Pembinaan di sini bermaksud menunjukkan objek dari kelas barisan perpustakaan. Objek beratur mesti mempunyai nama yang diberikan kepadanya oleh pengaturcara. Sintaks paling mudah untuk membuat barisan keutamaan adalah:
keutamaan_queueDengan sintaks ini, nilai terbesar dikeluarkan terlebih dahulu. Contoh contohnya adalah:
keutamaan_queueatau
keutamaan_queueVektor dan deque adalah dua struktur data di C++. Priority_queue boleh dibuat dengan salah satu daripadanya. Sintaks untuk membuat barisan keutamaan dari struktur vektor adalah:
keutamaan_queueContoh contoh ini adalah:
keutamaan_queuePerhatikan jurang antara> dan> di akhir deklarasi. Ini untuk mengelakkan kekeliruan dengan >>. Kod perbandingan lalai adalah "kurang
Sekiranya nilai paling sedikit dihapuskan terlebih dahulu, maka pernyataannya mestilah:
keutamaan_queueFungsi Anggota Penting
Fungsi tolak ()
Fungsi ini mendorong nilai, yang merupakan argumennya, ke priority_queue. Ia kembali terbatal. Kod berikut menggambarkan ini:
pq.tolak (10);
pq.tolak (30);
pq.tolak (20);
pq.tolak (50);
pq.tolak (40);
Priority_queue ini telah menerima 5 nilai integer dalam urutan 10, 30, 20, 50, 40. Sekiranya semua elemen ini keluar dari barisan keutamaan, maka elemen tersebut akan keluar mengikut urutan 50, 40, 30, 20, 10.
Fungsi pop ()
Fungsi ini membuang dari priority_queue nilai dengan keutamaan tertinggi. Sekiranya kod perbandingan “lebih besar
pq.tolak ('a'); pq.tolak ('c'); pq.tolak ('b'); pq.tolak ('e'); pq.tolak ('d');
Perhatikan bahawa untuk memanggil fungsi anggota, nama objek harus diikuti dengan titik, dan kemudian fungsi.
Fungsi teratas ()
The pop () fungsi membuang nilai keutamaan tertinggi berikutnya, tetapi tidak mengembalikannya, sebagai pop () adalah fungsi batal. Menggunakan atas () berfungsi untuk mengetahui nilai keutamaan tertinggi yang harus dikeluarkan seterusnya. The atas () fungsi mengembalikan salinan nilai keutamaan tertinggi di priority_queue. Kod berikut, di mana nilai keutamaan tertinggi seterusnya adalah nilai paling rendah, menggambarkan ini
pq.tolak ('a'); pq.tolak ('c'); pq.tolak ('b'); pq.tolak ('e'); pq.tolak ('d');
char ch1 = pq.atas (); pq.pop ();
char ch2 = pq.atas (); pq.pop ();
char ch3 = pq.atas (); pq.pop ();
char ch4 = pq.atas (); pq.pop ();
char ch5 = pq.atas (); pq.pop ();
cout<
Fungsi kosong ()
Sekiranya pengaturcara menggunakan atas () berfungsi pada priority_queue kosong, setelah penyusunan berjaya, dia akan menerima mesej ralat seperti:
Oleh itu, selalu periksa apakah barisan keutamaan tidak kosong sebelum menggunakan atas () fungsi. The kosong () fungsi anggota mengembalikan bool, benar, jika barisan kosong, dan salah jika barisan tidak kosong. Kod berikut menggambarkan ini:
keutamaan_queueint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.tolak (i1); pq.tolak (i2); pq.tolak (i3); pq.tolak (i4); pq.tolak (i5);
semasa (!pq.kosong ())
cout << pq.top() << ";
pq.pop ();
cout << '\n';
Fungsi Baris Keutamaan Lain
Ukuran () Fungsi
Fungsi ini mengembalikan panjang giliran keutamaan, seperti yang ditunjukkan oleh kod berikut:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.tolak (i1); pq.tolak (i2); pq.tolak (i3); pq.tolak (i4); pq.tolak (i5);
int len = pq.saiz ();
cout << len << '\n';
Keluarannya adalah 5.
Fungsi pertukaran ()
Sekiranya dua priority_queues mempunyai jenis dan ukuran yang sama, maka mereka boleh ditukar dengan fungsi ini, seperti yang ditunjukkan oleh kod berikut:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.tolak (i1); pq1.tolak (i2); pq1.tolak (i3); pq1.tolak (i4); pq1.tolak (i5);
keutamaan_queue
int it1 = 1; int itu2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.tolak (it1); pqA.tolak (it2); pqA.tolak (it3); pqA.tolak (it4); pqA.tolak (it5);
pq1.pertukaran (pqA);
semasa (!pq1.kosong ())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
semasa (!pqA.kosong ())
cout << pqA.top() << ";
pqA.pop ();
cout<<'\n';
Keluarannya adalah:
5 4 3 2 1
50 40 30 20 10
Tempat letak () Fuction
The tempat () fungsi serupa dengan fungsi tolak. Kod berikut menggambarkan ini:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.tempat kerja (i1); pq1.tempat kerja (i2); pq1.tempat kerja (i3); pq1.tempat kerja (i4); pq1.tempat kerja (i5);
semasa (!pq1.kosong ())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
Keluarannya adalah:
50 40 30 20 10
Data Rentetan
Semasa membandingkan rentetan, kelas rentetan harus digunakan dan bukan penggunaan langsung dari string string kerana ia akan membandingkan penunjuk dan bukan rentetan yang sebenarnya. Kod berikut menunjukkan bagaimana kelas rentetan digunakan:
#sertakankeutamaan_queue
string s1 = string ("pen"), s2 = string ("pensil"), s3 = string ("buku latihan"), s4 = string ("buku teks"), s5 = string ("pembaris");
pq1.tolak (s1); pq1.tolak (s2); pq1.tolak (s3); pq1.tolak (s4); pq1.tolak (s5);
semasa (!pq1.kosong ())
cout << pq1.top() << " ";
pq1.pop ();
cout<<'\n';
Keluarannya adalah:
buku latihan pembaris pensel buku teks
Pembinaan Baris Keutamaan Lain
Penciptaan Eksplisit dari Vektor
Baris keutamaan dapat dibuat secara eksplisit dari vektor seperti yang ditunjukkan oleh kod berikut:
vektor
keutamaan_queue
semasa (!pq.kosong ())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Keluarannya ialah: 50 40 30 20 10. Kali ini, header vektor juga harus disertakan. Argumen untuk fungsi konstruktor mengambil petunjuk awal dan akhir vektor. Jenis data untuk vektor dan jenis data untuk priority_queue mestilah sama.
Untuk membuat keutamaan nilai paling rendah, deklarasi untuk pembina adalah:
keutamaan_queuePenciptaan Eksplisit dari Array
Baris keutamaan dapat dibuat secara eksplisit dari array seperti yang ditunjukkan oleh kod berikut:
keutamaan_queue
semasa (!pq.kosong ())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Keluarannya ialah: 50 40 30 20 10. Argumen untuk fungsi konstruktor mengambil titik awal dan akhir array. arr mengembalikan penunjuk permulaan, "arr + 5" mengembalikan penunjuk tepat setelah array, dan 5 adalah ukuran array. Jenis data untuk array dan jenis data untuk priority_queue mestilah sama.
Untuk menjadikan nilai paling rendah sebagai keutamaan, deklarasi untuk pembina adalah:
keutamaan_queueCatatan: Dalam C ++, priority_queue sebenarnya disebut penyesuai, bukan hanya bekas.
Kod Perbandingan Tersuai
Memiliki semua nilai dalam barisan keutamaan menaik atau semua menurun bukan satu-satunya pilihan untuk barisan keutamaan. Contohnya, senarai 11 bilangan bulat untuk timbunan maksimum ialah:
88, 86, 87, 84, 82, 79,74, 80, 81,,, 64, 69
Nilai tertinggi ialah 88. Ini diikuti oleh dua nombor: 86 dan 87, yang kurang dari 88. Angka selebihnya kurang daripada tiga nombor ini, tetapi tidak betul-betul teratur. Terdapat dua sel kosong dalam senarai. Angka 84 dan 82 kurang daripada 86. Angka 79 dan 74 kurang daripada 87. Nombor 80 dan 81 kurang daripada 84. Nombor 64 dan 69 kurang daripada 79.
Penempatan nombor mengikut kriteria timbunan maksimum - lihat kemudian. Untuk menyediakan skema seperti itu untuk priority_queue, pengaturcara harus menyediakan kod perbandingannya sendiri - lihat kemudian.
Kesimpulannya
Priority_queue C ++ adalah barisan pertama dalam keluar. Fungsi anggota, tolak (), menambah nilai baru ke dalam barisan. Fungsi anggota, atas (), membaca nilai teratas dalam barisan. Fungsi anggota, pop (), mengalih keluar tanpa mengembalikan nilai tertinggi giliran. Fungsi anggota, kosong (), memeriksa sama ada barisan kosong. Walau bagaimanapun, priority_queue berbeza dari barisan, kerana itu, ia mengikuti beberapa algoritma keutamaan. Ini boleh menjadi yang terbaik, dari yang pertama hingga yang terakhir, atau paling tidak, dari yang pertama hingga terakhir. Kriteria (algoritma) juga boleh ditentukan oleh pengaturcara.