Aracılığıyla paylaş


priority_queue Sınıf

Her zaman en büyük veya en yüksek önceliğe sahip olan bazı temel kapsayıcı türlerinin en üst öğesiyle erişimi sınırlayan bir işlev kısıtlaması sağlayan şablon kapsayıcı bağdaştırıcısı sınıfı. öğesine yeni öğeler eklenebilir priority_queue ve öğesinin priority_queue üst öğesi incelenebilir veya kaldırılabilir.

Sözdizimi

template <class Type, class Container= vector <Type>, class Compare= less <typename Container ::value_type>>
class priority_queue

Parametreler

Type
içinde priority_queuedepolanacak öğe veri türü.

Container
uygulamak için kullanılan temel kapsayıcının priority_queuetürü.

Compare
içinde göreli düzenlerini priority_queuebelirlemek için iki öğe değerini sıralama anahtarları olarak karşılaştırabilen bir işlev nesnesi sağlayan tür. Bu bağımsız değişken isteğe bağlıdır ve ikili koşul less<typename Container::value_type> varsayılan değerdir.

Açıklamalar

Bir kuyruk nesnesinin ilk şablon parametresinde belirtilen sınıfın Type öğeleri ile eş anlamlıdır ve ikinci şablon parametresi tarafından belirtilen temel kapsayıcı sınıfındaki Container öğe türüyle value_type eşleşmelidir. Type atanabilir olmalıdır, böylece bu türdeki nesneleri kopyalamak ve bu türdeki değişkenlere değer atamak mümkündür.

, priority_queue sınıfının Traitssaklı işlev nesnesini çağırarak denetlediği sırayı sıralar. Genel olarak, öğelerin bu düzeni oluşturmak için yalnızca karşılaştırılabilirden daha az olması gerekir: böylece, herhangi iki öğe göz önüne alındığında, eşdeğer oldukları (diğerinden küçük olmadığı anlamına gelir) veya birinin diğerinden küçük olduğu belirlenebilir. Bu, denk olmayan öğeler arasında bir sıralamaya neden olur. Daha teknik bir not üzerinde, karşılaştırma işlevi standart matematiksel anlamda katı bir zayıf sıralama sevk eden ikili bir koşuldur.

için priority_queue uygun temel kapsayıcı sınıfları Sınıf ve varsayılan vector Sınıf veya , push_backve işlemlerini frontdestekleyen başka bir sıralı kapsayıcı ve pop_back rastgele erişim yineleyicisi içerirdeque. Temel alınan kapsayıcı sınıfı kapsayıcı bağdaştırıcısı içinde kapsüllenmiştir ve bu da yalnızca sıralı kapsayıcı üyesi işlevlerinin sınırlı kümesini ortak arabirim olarak kullanıma sunar.

Her ikisine de öğe ekleme ve öğe priority_queue kaldırma işlemi logaritmik karmaşıklık içerir. içindeki priority_queue öğelere erişmenin karmaşıklığı süreklidir.

C++ Standart Kitaplığı tarafından tanımlanan üç tür kapsayıcı bağdaştırıcısı vardır: stack, queueve priority_queue. Her biri, temel alınan bazı kapsayıcı sınıfının işlevselliğini standart bir veri yapısına hassas bir şekilde denetlenen bir arabirim sağlamak üzere kısıtlar.

  • Sınıfıstack, bir last-in, first-out (LIFO) veri yapısını destekler. Akılda tutulması gereken iyi bir analog plaka yığını olabilir. Öğeler (levhalar) yalnızca temel kapsayıcının sonundaki son öğe olan yığının en üstünden eklenebilir, incelenebilir veya kaldırılabilir. Yalnızca en üst öğeye erişme kısıtlaması, sınıfını stack kullanmanın nedenidir.

  • Sınıfıqueue, ilk giriş, ilk çıkış (FIFO) veri yapısını destekler. Akılda tutulması gereken iyi bir analog, insanların banka veznesi için sıraya girmiş olmasıdır. Öğeler (kişiler) satırın arkasına eklenebilir ve satırın önünden kaldırılabilir. Bir hattın hem ön hem de arka kısmı incelenebilir. Yalnızca ön ve arka öğelere bu şekilde erişme kısıtlaması, sınıfı kullanmanın queue nedenidir.

  • sınıfı priority_queue öğelerini sıralar, böylece en büyük öğe her zaman en üst konumda olur. Bir öğenin eklenmesini ve üst öğenin incelenmesini ve kaldırılmasını destekler. Akılda tutulması gereken iyi bir analog, insanların yaşlarına, boylarına veya başka ölçütlere göre düzenlendikleri yerde sıraya girmiş olmasıdır.

Oluşturucular

Oluşturucu Açıklama
priority_queue priority_queue Boş olan veya bir temel kapsayıcı nesnesinin veya başka priority_queuebir öğesinin aralığının kopyası olan bir oluşturur.

Tür tanımları

Tür adı Açıklama
container_type tarafından uyarlanacak temel kapsayıcıyı sağlayan bir priority_queuetür.
size_type içindeki öğe sayısını temsil eden işaretsiz bir priority_queuetamsayı türü.
value_type içinde öğe olarak depolanan nesne türünü temsil eden bir priority_queuetür.

Üye işlevleri

Üye işlevi Açıklama
empty boş olup olmadığını sınar priority_queue .
pop öğesinin en büyük öğesini priority_queue üst konumdan kaldırır.
push öğesinden öğesinin önceliğine göre öncelik kuyruğuna bir öğe operator<ekler.
size içindeki priority_queueöğe sayısını döndürür.
top öğesinin en üstündeki priority_queueen büyük öğeye sabit bir başvuru döndürür.

Gereksinimler

Üstbilgi: <queue>

Ad alanı: std

priority_queue::container_type

Uyarlanacak temel kapsayıcıyı sağlayan bir tür.

typedef Container container_type;

Açıklamalar

türü, şablon parametresi Containeriçin bir eş anlamlıdır. C++ Standart Kitaplık dizisi kapsayıcı sınıfı deque ve varsayılan sınıf vector , bir priority_queue nesne için temel kapsayıcı olarak kullanılacak gereksinimleri karşılar. Gereksinimleri karşılayan kullanıcı tanımlı türler de kullanılabilir.

hakkında Containerdaha fazla bilgi için Sınıf konusunun Açıklamalar bölümüne priority_queue bakın.

Örnek

bildirme ve kullanma container_typeörneği için priority_queue örneğine bakın.

priority_queue::empty

boş priority_queue olup olmadığını sınar.

bool empty() const;

Dönüş Değeri

truepriority_queue boşsa; false priority_queue yoksa.

Örnek

// 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

öğesinin en büyük öğesini priority_queue üst konumdan kaldırır.

void pop();

Açıklamalar

priority_queue üye işlevini uygulamak için nonempty olmalıdır. öğesinin priority_queue üstü her zaman kapsayıcıdaki en büyük öğe tarafından işgal edilir.

Örnek

// 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

priority_queue Boş olan veya bir temel kapsayıcı nesnesinin veya başka priority_queuebir öğesinin aralığının kopyası olan bir oluşturur.

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);

Parametreler

_comp
türündeki constTraits öğeleri priority_queuesıralamak için kullanılan ve varsayılan olarak temel kapsayıcının işlevini karşılaştırmak için kullanılan karşılaştırma işlevi.

_Cont
Oluşturulduğu temel kapsayıcı priority_queue bir kopya olacaktır.

right
priority_queue Bu kümenin bir kopyası olması gerekir.

first
Kopyalanacak öğe aralığındaki ilk öğenin konumu.

last
Kopyalanacak öğe aralığının ötesindeki ilk öğenin konumu.

Açıklamalar

İlk üç oluşturucunun her biri boş bir başlangıç priority_queuedeğeri belirtir, ikincisi de öğelerin sırasını belirlerken kullanılacak karşılaştırma işlevinin türünü (comp) ve kullanılacak (_Cont) öğesini açıkça belirten üçüncü işlevi belirtir container_type . anahtar sözcüğü explicit belirli türdeki otomatik tür dönüştürmelerini gizler.

Dördüncü oluşturucu, öğesinin priority_queue rightbir kopyasını belirtir.

Son üç oluşturucu, bazı kapsayıcıların aralığını [first, last) kopyalar ve sınıfın ve container_typekarşılaştırma işlevinin Traits türünü belirtirken açıklığı artan bir priority_queue şekilde başlatmak için değerlerini kullanır.

Örnek

// 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

öğesinden öğesinin önceliğine göre öncelik kuyruğuna bir öğe operator<ekler.

void push(const Type& val);

Parametreler

val
öğesinin en üstüne priority_queueeklendi.

Açıklamalar

öğesinin priority_queue üst kısmı, kapsayıcıdaki en büyük öğenin kapladığı konumdur.

Örnek

// 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

içindeki priority_queueöğe sayısını döndürür.

size_type size() const;

Dönüş Değeri

geçerli uzunluğu priority_queue.

Örnek

// 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

içindeki öğe sayısını temsil eden işaretsiz bir priority_queuetamsayı türü.

typedef typename Container::size_type size_type;

Açıklamalar

türü, tarafından uyarlanan temel kapsayıcının eş anlamlısıdır size_type priority_queue.

Örnek

bildirme ve kullanma size_typeörneği için size örneğine bakın.

priority_queue::top

öğesinin en üstündeki priority_queueen büyük öğeye sabit bir başvuru döndürür.

const_reference top() const;

Dönüş Değeri

işlevinin nesnesi tarafından Traits belirlenen en büyük öğeye priority_queuebaşvuru.

Açıklamalar

priority_queue üye işlevini uygulamak için nonempty olmalıdır.

Örnek

// 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

içinde öğe olarak depolanan nesne türünü temsil eden bir priority_queuetür.

typedef typename Container::value_type value_type;

Açıklamalar

türü, tarafından uyarlanan temel kapsayıcının eş anlamlısıdır value_type priority_queue.

Örnek

// 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.

Ayrıca bkz.

C++ Standart Kitaplığında İş Parçacığı Güvenliği
C++ Standart Kitaplığı Başvurusu