priority_queue
Třída
Třída adaptéru kontejneru šablony, která poskytuje omezení funkčnosti omezující přístup k hornímu prvku některého základního typu kontejneru, který je vždy největší nebo nejvyšší prioritou. Do horní části priority_queue
je možné přidat priority_queue
nové prvky a je možné je zkontrolovat nebo odebrat.
Syntaxe
template <class Type, class Container= vector <Type>, class Compare= less <typename Container ::value_type>>
class priority_queue
Parametry
Type
Datový typ prvku, který má být uložen v souboru priority_queue
.
Container
Typ základního kontejneru použitého k implementaci priority_queue
.
Compare
Typ, který poskytuje objekt funkce, který může porovnat dvě hodnoty prvků jako klíče řazení určit jejich relativní pořadí v priority_queue
. Tento argument je nepovinný a binární predikát less<typename Container::value_type>
je výchozí hodnota.
Poznámky
Prvky třídy Type
stanovené v prvním parametru šablony objektu fronty jsou synonymem value_type
a musí odpovídat typu prvku v podkladové třídě Container
kontejneru stanovené druhým parametrem šablony. Musí Type
být přiřaditelné, aby bylo možné kopírovat objekty tohoto typu a přiřazovat hodnoty proměnným daného typu.
Pořadí priority_queue
, které řídí voláním uloženého objektu funkce třídy Traits
. Obecně platí, že prvky musí být pouze menší než srovnatelné pro stanovení tohoto pořadí: takže vzhledem ke všem dvěma prvkům může být zjištěno, že jsou ekvivalentní (ve smyslu, že ani jeden není menší než druhý), nebo že jeden je menší než druhý. To má za výsledek řazení mezi neekvivalentními prvky. Technicky je funkce porovnání binárním predikátem, který indukuje přísné slabé řazení, standardním matematickým způsobem.
Vhodné základní třídy kontejneru pro priority_queue
zahrnutídeque
třídy a výchozí vector
třídy nebo jakýkoli jiný sekvenční kontejner, který podporuje operace front
, push_back
a pop_back
a iterátor náhodného přístupu. Základní třída kontejneru je zapouzdřena v adaptéru kontejneru, která zveřejňuje pouze omezenou sadu členů kontejneru sekvence jako veřejné rozhraní.
Přidání elementů do priority_queue
obou prvků a jejich odebrání mají logaritmickou složitost. Přístup k prvkům v elementech priority_queue
má konstantní složitost.
Existují tři typy adaptérů kontejnerů definované standardní knihovnou jazyka C++: stack
, queue
a priority_queue
. Každá z nich omezuje funkčnost některé základní třídy kontejneru tak, aby poskytovala přesně řízené rozhraní na standardní datovou strukturu.
Třída
stack
podporuje datovou strukturu typu last-in (FIRST-out). Dobrý analog, který byste měli mít na paměti, by byl zásobník plátů. Prvky (desky) lze vložit, zkontrolovat nebo odebrat pouze z horní části zásobníku, což je poslední prvek na konci základního kontejneru. Důvodem použití třídy je omezení pro přístup pouze k hornímustack
prvku.Třída
queue
podporuje datovou strukturu FIFO (first-in). Dobrý analog, který byste měli mít na paměti, by byl lidé, kteří se vysílají do bankovního řekněte. Prvky (osoby) mohou být přidány do zadní části řádku a jsou odebrány z přední části čáry. Je možné zkontrolovat přední i zadní stranu čáry. Důvodem použití třídy je omezení pro přístup pouze k předním a zadním prvkůmqueue
tímto způsobem.Třída
priority_queue
objednává své prvky tak, aby největší prvek byl vždy na nejvyšší pozici. Podporuje vložení prvku a kontrolu a odebrání horního prvku. Dobrým analogem, který byste měli mít na paměti, by byli lidé, kteří jsou uspořádaní podle věku, výšky nebo nějakého jiného kritéria.
Konstruktory
Konstruktor | Popis |
---|---|
priority_queue |
Vytvoří prázdnou priority_queue nebo je kopií rozsahu základního objektu kontejneru nebo jiného priority_queue objektu . |
Typedefs
Název typu | Popis |
---|---|
container_type |
Typ, který poskytuje základní kontejner, který má být upraven pomocí priority_queue . |
size_type |
Typ celého čísla bez znaménka, který může představovat počet prvků v objektu priority_queue . |
value_type |
Typ, který představuje typ objektu uloženého jako prvek v objektu priority_queue . |
Členské funkce
Členová funkce | Popis |
---|---|
empty |
Testuje, priority_queue jestli je prázdný. |
pop |
Odebere největší prvek priority_queue z nejvyšší pozice. |
push |
Přidá prvek do fronty priority na základě priority prvku z operator< . |
size |
Vrátí počet prvků v sadě priority_queue . |
top |
Vrátí odkaz const na největší prvek v horní části priority_queue . |
Požadavky
Záhlaví: <queue>
Obor názvů: std
priority_queue::container_type
Typ, který poskytuje základní kontejner, který se má přizpůsobit.
typedef Container container_type;
Poznámky
Typ je synonymem pro parametr Container
šablony . Třída kontejneru deque
sekvence standardní knihovny C++ a výchozí třída vector
splňují požadavky, které se mají použít jako základní kontejner pro priority_queue
objekt. Uživatelem definované typy, které splňují požadavky, lze použít také.
Další informace naleznete Container
v části Poznámky tématu předmětupriority_queue
.
Příklad
Podívejte se na příklad priority_queue
, jak deklarovat a používat container_type
.
priority_queue::empty
Testuje, jestli priority_queue
je prázdný.
bool empty() const;
Návratová hodnota
true
priority_queue
pokud je prázdný; false
pokud priority_queue
je neprázdný.
Příklad
// 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
Odebere největší prvek priority_queue
z nejvyšší pozice.
void pop();
Poznámky
Aby priority_queue
se členová funkce použila, musí být nechtěná. Horní část je priority_queue
vždy obsazena největším prvkem v kontejneru.
Příklad
// 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
Vytvoří prázdnou priority_queue
nebo je kopií rozsahu základního objektu kontejneru nebo jiného priority_queue
objektu .
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);
Parametry
_comp
Porovnávací funkce typu constTraits
použitá k seřazení prvků v souboru priority_queue
, který ve výchozím nastavení porovnává funkci základního kontejneru.
_Cont
Základní kontejner, ze kterého má být sestavená priority_queue
kopie.
right
Z priority_queue
nichž sestavená sada má být kopií.
first
Pozice prvního prvku v oblasti prvků, které se mají zkopírovat.
last
Pozice prvního prvku nad rozsah prvků, které se mají zkopírovat.
Poznámky
Každý z prvních tří konstruktorů určuje prázdný iniciála priority_queue
, druhý také určuje typ porovnávací funkce (comp
), která se má použít při stanovení pořadí prvků a třetí explicitně specifikuje container_type
(_Cont
), která se má použít. Klíčové slovo explicit
potlačí určité druhy automatického převodu typů.
Čtvrtý konstruktor určuje kopii priority_queue right
.
Poslední tři konstruktory zkopírují rozsah [first, last)
určitého kontejneru a používají hodnoty k inicializaci priority_queue
s rostoucí explicitností při zadávání typu porovnávací funkce třídy Traits
a container_type
.
Příklad
// 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
Přidá prvek do fronty priority na základě priority prvku z operator<
.
void push(const Type& val);
Parametry
val
Prvek přidaný na začátek priority_queue
.
Poznámky
Horní část priority_queue
je pozice obsazená největším prvkem v kontejneru.
Příklad
// 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
Vrátí počet prvků v sadě priority_queue
.
size_type size() const;
Návratová hodnota
Aktuální délka priority_queue
.
Příklad
// 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
Typ celého čísla bez znaménka, který může představovat počet prvků v objektu priority_queue
.
typedef typename Container::size_type size_type;
Poznámky
Typ je synonymem základního size_type
kontejneru přizpůsobeného priority_queue
.
Příklad
Podívejte se na příklad size
, jak deklarovat a používat size_type
.
priority_queue::top
Vrátí odkaz const na největší prvek v horní části priority_queue
.
const_reference top() const;
Návratová hodnota
Odkaz na největší prvek, jak je určeno Traits
funkcí, objektu priority_queue
.
Poznámky
Aby priority_queue
se členová funkce použila, musí být nechtěná.
Příklad
// 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
Typ, který představuje typ objektu uloženého jako prvek v objektu priority_queue
.
typedef typename Container::value_type value_type;
Poznámky
Typ je synonymem základního value_type
kontejneru přizpůsobeného priority_queue
.
Příklad
// 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.
Viz také
Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace