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_queue
depolanacak öğe veri türü.
Container
uygulamak için kullanılan temel kapsayıcının priority_queue
türü.
Compare
içinde göreli düzenlerini priority_queue
belirlemek 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 Traits
saklı 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_back
ve işlemlerini front
destekleyen 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
, queue
ve 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ınqueue
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_queue bir öğ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_queue tür. |
size_type |
içindeki öğe sayısını temsil eden işaretsiz bir priority_queue tamsayı türü. |
value_type |
içinde öğe olarak depolanan nesne türünü temsil eden bir priority_queue tü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_queue en 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 Container
iç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 Container
daha 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
true
priority_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_queue
bir öğ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_queue
sı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_queue
değ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 right
bir kopyasını belirtir.
Son üç oluşturucu, bazı kapsayıcıların aralığını [first, last)
kopyalar ve sınıfın ve container_type
karşı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_queue
eklendi.
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_queue
tamsayı 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_queue
en 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_queue
baş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_queue
tü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