Bagikan melalui


priority_queue Kelas

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 stack mendukung 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 menggunakan stack kelas .

  • Kelas queue mendukung 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 menggunakan queue kelas .

  • Kelas priority_queue mengurutkan 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++