Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kelas adaptor kontainer templat yang menyediakan pembatasan fungsionalitas yang membatasi akses ke elemen teratas dari beberapa jenis kontainer yang mendasar, yang selalu merupakan yang terbesar atau prioritas tertinggi. Elemen baru dapat ditambahkan ke priority_queue dan elemen priority_queue teratas dapat diperiksa atau dihapus.
Sintaks
template <class Type, class Container= vector <Type>, class Compare= less <typename Container ::value_type>>
class priority_queue
Parameter
Type
Jenis data elemen yang akan disimpan di priority_queue.
Container
Jenis kontainer yang mendasar yang digunakan untuk mengimplementasikan priority_queue.
Compare
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua nilai elemen sebagai kunci pengurutan untuk menentukan urutan relatifnya di priority_queue. Argumen ini bersifat opsional dan predikat less<typename Container::value_type> biner adalah nilai default.
Keterangan
Elemen kelas Type yang ditetapkan dalam parameter templat pertama dari objek antrean identik dengan dan harus cocok dengan value_type jenis elemen dalam kelas Container kontainer yang mendasar yang ditetapkan oleh parameter templat kedua. harus dapat ditetapkan, sehingga dimungkinkan untuk menyalin objek dari jenis tersebut Type dan untuk menetapkan nilai ke variabel jenis tersebut.
Urutan priority_queue yang dikontrolnya dengan memanggil objek fungsi tersimpan kelas Traits. Secara umum, elemen-elemen hanya perlu kurang dari sebanding untuk menetapkan urutan ini: sehingga, mengingat dua elemen, mungkin ditentukan bahwa elemen tersebut setara (dalam arti tidak kurang dari yang lain) atau yang satu itu kurang dari yang lain. Ini menghasilkan pengurutan antara elemen yang tidak setara. Pada catatan yang lebih teknis, fungsi perbandingan adalah predikat biner yang menginduksi urutan lemah yang ketat dalam arti matematika standar.
Kelas kontainer yang mendasar yang sesuai untuk menyertakan Kelas dan Kelas default vector atau kontainer urutan lainnya yang mendukung operasi front, push_back, dan pop_back iterator akses acak.deque priority_queue Kelas kontainer yang mendasarinya dienkapsulasi dalam adaptor kontainer, yang hanya mengekspos set terbatas dari fungsi anggota kontainer urutan sebagai antarmuka publik.
Menambahkan elemen ke dan menghapus elemen dari priority_queue keduanya memiliki kompleksitas logaritma. Mengakses elemen dalam memiliki kompleksitas konstan priority_queue .
Ada tiga jenis adaptor kontainer yang ditentukan oleh Pustaka Standar C++: stack, queue, dan priority_queue. Masing-masing membatasi fungsionalitas beberapa kelas kontainer yang mendasar untuk menyediakan antarmuka yang dikontrol dengan tepat ke struktur data standar.
Kelas
stackmendukung struktur data last-in, first-out (LIFO). Analog yang baik untuk diingat adalah tumpukan piring. Elemen (pelat) dapat dimasukkan, diperiksa, atau dihapus hanya dari bagian atas tumpukan, yang merupakan elemen terakhir di akhir kontainer dasar. Pembatasan untuk mengakses hanya elemen teratas adalah alasan untuk menggunakanstackkelas .Kelas
queuemendukung struktur data first-in, first-out (FIFO). Analog yang baik untuk diingat adalah orang-orang yang berbaris untuk teller bank. Elemen (orang) dapat ditambahkan ke bagian belakang garis dan dihapus dari bagian depan garis. Baik bagian depan maupun belakang garis dapat diperiksa. Pembatasan untuk mengakses hanya elemen depan dan belakang dengan cara ini adalah alasan untuk menggunakanqueuekelas .Kelas
priority_queuemengurutkan elemennya sehingga elemen terbesar selalu berada di posisi atas. Ini mendukung penyisipan elemen dan inspeksi dan penghapusan elemen teratas. Analog yang baik untuk diingat adalah orang-orang yang berbaris di mana mereka diatur berdasarkan usia, tinggi, atau kriteria lainnya.
Konstruktor
| Konstruktor | Deskripsi |
|---|---|
priority_queue |
Membangun priority_queue yang kosong atau yang merupakan salinan dari rentang objek kontainer dasar atau lainnya priority_queue. |
Typedefs
| Nama jenis | Deskripsi |
|---|---|
container_type |
Jenis yang menyediakan kontainer dasar untuk disesuaikan oleh priority_queue. |
size_type |
Jenis bilangan bulat yang tidak ditandatangani yang dapat mewakili jumlah elemen dalam priority_queue. |
value_type |
Jenis yang mewakili jenis objek yang disimpan sebagai elemen dalam priority_queue. |
Fungsi anggota
| Fungsi anggota | Deskripsi |
|---|---|
empty |
Menguji apakah priority_queue kosong. |
pop |
Menghapus elemen terbesar dari priority_queue posisi atas. |
push |
Menambahkan elemen ke antrean prioritas berdasarkan prioritas elemen dari operator<. |
size |
Mengembalikan jumlah elemen dalam priority_queue. |
top |
Mengembalikan referensi const ke elemen terbesar di bagian priority_queueatas . |
Persyaratan
Header: <queue>
kumpulan nama XML: std
priority_queue::container_type
Jenis yang menyediakan kontainer dasar yang akan diadaptasi.
typedef Container container_type;
Keterangan
Jenisnya adalah sinonim untuk parameter Containertemplat . Kelas deque kontainer urutan Pustaka Standar C++ dan kelas vector default memenuhi persyaratan yang akan digunakan sebagai kontainer dasar untuk priority_queue objek. Jenis yang ditentukan pengguna yang memenuhi persyaratan juga dapat digunakan.
Untuk informasi selengkapnya tentang Container, lihat bagian Keterangan dari priority_queue topik Kelas .
Contoh
Lihat contoh untuk priority_queue contoh cara mendeklarasikan dan menggunakan container_type.
priority_queue::empty
Menguji apakah kosong priority_queue .
bool empty() const;
Tampilkan Nilai
truepriority_queue jika kosong; false jika priority_queue tidak ada.
Contoh
// pqueue_empty.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares priority_queues with default deque base container
priority_queue <int> q1, s2;
q1.push( 1 );
if ( q1.empty( ) )
cout << "The priority_queue q1 is empty." << endl;
else
cout << "The priority_queue q1 is not empty." << endl;
if ( s2.empty( ) )
cout << "The priority_queue s2 is empty." << endl;
else
cout << "The priority_queue s2 is not empty." << endl;
}
The priority_queue q1 is not empty.
The priority_queue s2 is empty.
priority_queue::pop
Menghapus elemen terbesar dari priority_queue posisi atas.
void pop();
Keterangan
priority_queue harus tidak ada untuk menerapkan fungsi anggota. Bagian priority_queue atas selalu ditempati oleh elemen terbesar dalam kontainer.
Contoh
// pqueue_pop.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue <int> q1, s2;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
priority_queue <int>::size_type i, iii;
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
const int& ii = q1.top( );
cout << "The element at the top of the priority_queue is "
<< ii << "." << endl;
q1.pop( );
iii = q1.size( );
cout << "After a pop, the priority_queue length is "
<< iii << "." << endl;
const int& iv = q1.top( );
cout << "After a pop, the element at the top of the "
<< "priority_queue is " << iv << "." << endl;
}
The priority_queue length is 3.
The element at the top of the priority_queue is 30.
After a pop, the priority_queue length is 2.
After a pop, the element at the top of the priority_queue is 20.
priority_queue::priority_queue
Membangun priority_queue yang kosong atau yang merupakan salinan rentang objek kontainer dasar atau dari objek kontainer dasar lainnya priority_queue.
priority_queue();
explicit priority_queue(const Traits& _comp);
priority_queue(const Traits& _comp, const container_type& _Cont);
priority_queue(const priority_queue& right);
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last);
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last, const Traits& _comp);
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last, const Traits& _comp, const container_type& _Cont);
Parameter
_comp
Fungsi perbandingan jenis constTraits yang digunakan untuk mengurutkan elemen dalam priority_queue, yang defaultnya membandingkan fungsi kontainer dasar.
_Cont
Kontainer dasar yang dibangun priority_queue akan menjadi salinan.
right
di priority_queue mana set yang dibangun adalah menjadi salinan.
first
Posisi elemen pertama dalam rentang elemen yang akan disalin.
last
Posisi elemen pertama di luar rentang elemen yang akan disalin.
Keterangan
Masing-masing dari tiga konstruktor pertama menentukan awal priority_queuekosong , yang kedua juga menentukan jenis fungsi perbandingan (comp) yang akan digunakan dalam menetapkan urutan elemen dan yang ketiga secara eksplisit menentukan container_type (_Cont) yang akan digunakan. Kata kunci explicit menekan jenis konversi jenis otomatis tertentu.
Konstruktor keempat menentukan salinan priority_queue right.
Tiga konstruktor terakhir menyalin rentang [first, last) beberapa kontainer dan menggunakan nilai untuk menginisialisasi priority_queue dengan meningkatkan eksplisititas dalam menentukan jenis fungsi perbandingan kelas Traits dan container_type.
Contoh
// pqueue_ctor.cpp
// compile with: /EHsc
#include <queue>
#include <vector>
#include <deque>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// The first member function declares priority_queue
// with a default vector base container
priority_queue <int> q1;
cout << "q1 = ( ";
while ( !q1.empty( ) )
{
cout << q1.top( ) << " ";
q1.pop( );
}
cout << ")" << endl;
// Explicitly declares a priority_queue with nondefault
// deque base container
priority_queue <int, deque <int> > q2;
q2.push( 5 );
q2.push( 15 );
q2.push( 10 );
cout << "q2 = ( ";
while ( !q2.empty( ) )
{
cout << q2.top( ) << " ";
q2.pop( );
}
cout << ")" << endl;
// This method of printing out the elements of a priority_queue
// removes the elements from the priority queue, leaving it empty
cout << "After printing, q2 has " << q2.size( ) << " elements." << endl;
// The third member function declares a priority_queue
// with a vector base container and specifies that the comparison
// function greater is to be used for ordering elements
priority_queue <int, vector<int>, greater<int> > q3;
q3.push( 2 );
q3.push( 1 );
q3.push( 3 );
cout << "q3 = ( ";
while ( !q3.empty( ) )
{
cout << q3.top( ) << " ";
q3.pop( );
}
cout << ")" << endl;
// The fourth member function declares a priority_queue and
// initializes it with elements copied from another container:
// first, inserting elements into q1, then copying q1 elements into q4
q1.push( 100 );
q1.push( 200 );
priority_queue <int> q4( q1 );
cout << "q4 = ( ";
while ( !q4.empty( ) )
{
cout << q4.top( ) << " ";
q4.pop( );
}
cout << ")" << endl;
// Creates an auxiliary vector object v5 to be used to initialize q5
vector <int> v5;
vector <int>::iterator v5_Iter;
v5.push_back( 10 );
v5.push_back( 30 );
v5.push_back( 20 );
cout << "v5 = ( " ;
for ( v5_Iter = v5.begin( ) ; v5_Iter != v5.end( ) ; v5_Iter++ )
cout << *v5_Iter << " ";
cout << ")" << endl;
// The fifth member function declares and
// initializes a priority_queue q5 by copying the
// range v5[ first, last) from vector v5
priority_queue <int> q5( v5.begin( ), v5.begin( ) + 2 );
cout << "q5 = ( ";
while ( !q5.empty( ) )
{
cout << q5.top( ) << " ";
q5.pop( );
}
cout << ")" << endl;
// The sixth member function declares a priority_queue q6
// with a comparison function greater and initializes q6
// by copying the range v5[ first, last) from vector v5
priority_queue <int, vector<int>, greater<int> >
q6( v5.begin( ), v5.begin( ) + 2 );
cout << "q6 = ( ";
while ( !q6.empty( ) )
{
cout << q6.top( ) << " ";
q6.pop( );
}
cout << ")" << endl;
}
priority_queue::push
Menambahkan elemen ke antrean prioritas berdasarkan prioritas elemen dari operator<.
void push(const Type& val);
Parameter
val
Elemen ditambahkan ke bagian priority_queueatas .
Keterangan
Bagian atas priority_queue adalah posisi yang ditempati oleh elemen terbesar dalam kontainer.
Contoh
// pqueue_push.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue<int> q1;
q1.push( 10 );
q1.push( 30 );
q1.push( 20 );
priority_queue<int>::size_type i;
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
const int& ii = q1.top( );
cout << "The element at the top of the priority_queue is "
<< ii << "." << endl;
}
The priority_queue length is 3.
The element at the top of the priority_queue is 30.
priority_queue::size
Mengembalikan jumlah elemen dalam priority_queue.
size_type size() const;
Tampilkan Nilai
Panjang saat ini dari priority_queue.
Contoh
// pqueue_size.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue <int> q1, q2;
priority_queue <int>::size_type i;
q1.push( 1 );
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
q1.push( 2 );
i = q1.size( );
cout << "The priority_queue length is now " << i << "." << endl;
}
The priority_queue length is 1.
The priority_queue length is now 2.
priority_queue::size_type
Jenis bilangan bulat yang tidak ditandatangani yang dapat mewakili jumlah elemen dalam priority_queue.
typedef typename Container::size_type size_type;
Keterangan
Jenisnya adalah sinonim untuk size_type kontainer dasar yang diadaptasi oleh priority_queue.
Contoh
Lihat contoh untuk size contoh cara mendeklarasikan dan menggunakan size_type.
priority_queue::top
Mengembalikan referensi const ke elemen terbesar di bagian priority_queueatas .
const_reference top() const;
Tampilkan Nilai
Referensi ke elemen terbesar, seperti yang ditentukan oleh Traits fungsi, objek dari priority_queue.
Keterangan
priority_queue harus tidak ada untuk menerapkan fungsi anggota.
Contoh
// pqueue_top.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
priority_queue<int> q1;
q1.push( 10 );
q1.push( 30 );
q1.push( 20 );
priority_queue<int>::size_type i;
i = q1.size( );
cout << "The priority_queue length is " << i << "." << endl;
const int& ii = q1.top( );
cout << "The element at the top of the priority_queue is "
<< ii << "." << endl;
}
The priority_queue length is 3.
The element at the top of the priority_queue is 30.
priority_queue::value_type
Jenis yang mewakili jenis objek yang disimpan sebagai elemen dalam priority_queue.
typedef typename Container::value_type value_type;
Keterangan
Jenisnya adalah sinonim untuk value_type kontainer dasar yang diadaptasi oleh priority_queue.
Contoh
// pqueue_value_type.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares priority_queues with default deque base container
priority_queue<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
priority_queue<int> q1;
q1.push( AnInt );
cout << "The element at the top of the priority_queue is "
<< q1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the priority_queue is 69.
Lihat juga
Keamanan utas di Pustaka Standar C++
Referensi pustaka standar C++