Sdílet prostřednictvím


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_backa 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, queuea 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ímu stack 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ům queue 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_queueobjektu .

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 Containerv čá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

truepriority_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_queueobjektu .

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