A Prioritní fronta C++ je typ adaptéru kontejneru , speciálně navržený tak, že první prvek fronty je buď největší, nebo nejmenší ze všech prvků ve frontě a prvky jsou v nerostoucím nebo neklesajícím pořadí (proto vidíme, že každý prvek fronty má prioritu {pevné pořadí}).
V C++ STL je nejvyšší prvek ve výchozím nastavení vždy největší. Můžeme jej také změnit na nejmenší prvek nahoře. Prioritní fronty jsou postaveny na horní části maximální hromady a používají pole nebo vektor jako vnitřní strukturu. zjednodušeně řečeno, Prioritní fronta STL je implementace C++
// C++ program to demonstrate the use of priority_queue> #include> #include> using> namespace> std;> // driver code> int> main()> {> > int> arr[6] = { 10, 2, 4, 8, 6, 9 };> > // defining priority queue> > priority_queue<> int> >pq;> > // printing array> > cout <<> 'Array: '> ;> > for> (> auto> i : arr) {> > cout << i <<> ;> > }> > cout << endl;> > // pushing array sequentially one by one> > for> (> int> i = 0; i <6; i++) {> > pq.push(arr[i]);> > }> > // printing priority queue> > cout <<> 'Priority Queue: '> ;> > while> (!pq.empty()) {> > cout << pq.top() <<> ;> > pq.pop();> > }> > return> 0;> }> |
>
>Výstup
Array: 10 2 4 8 6 9 Priority Queue: 10 9 8 6 4 2>

Max. fronta priority haldy (výchozí schéma)
Jak vytvořit minimální hromadu pro prioritní frontu?
Jak jsme viděli dříve, prioritní fronta je ve výchozím nastavení v C++ implementována jako maximální halda, ale také nám poskytuje možnost změnit ji na minimální haldu předáním jiného parametru při vytváření fronty priority.
Syntax:
priority_queue gq;>
kde,
- „int“ je typ prvků, které chcete uložit do prioritní fronty. V tomto případě je to celé číslo. Můžete vyměnit int s jakýmkoli jiným typem dat, který potřebujete. „vektor“ je typ vnitřního kontejneru používaného k ukládání těchto prvků. std::priority_queue není kontejner sám o sobě, ale osvojitel kontejneru. Obaluje další nádoby. V tomto příkladu používáme a vektor , ale můžete si vybrat jiný kontejner, který podporuje metody front(), push_back() a pop_back().
- ' větší ‘ je vlastní porovnávací funkce. To určuje, jak jsou prvky seřazeny v prioritní frontě. V tomto konkrétním příkladu větší nastaví a min-hromada . To znamená, že nejmenší prvek bude nahoře ve frontě.
V případě maximální haldy jsme je nemuseli specifikovat, protože výchozí hodnoty pro ně jsou již vhodné pro maximální haldu.
Příklad:
C++
// C++ program to demonstrate> // min heap for priority queue> #include> #include> using> namespace> std;> void> showpq(> > priority_queue<> int> , vector<> int> >, větší<> int> >> g)> {> > while> (!g.empty()) {> > cout <<> << g.top();> > g.pop();> > }> > cout <<> '
'> ;> }> void> showArray(> int> * arr,> int> n)> {> > for> (> int> i = 0; i cout << arr[i] << ' '; } cout << endl; } // Driver Code int main() { int arr[6] = { 10, 2, 4, 8, 6, 9 }; priority_queue |
>
>Výstup
Array: 10 2 4 8 6 9 Priority Queue : 2 4 6 8 9 10>

Minimální prioritní fronta haldy
Poznámka: Výše uvedená syntaxe může být obtížně zapamatovatelná, takže v případě číselných hodnot můžeme hodnoty vynásobit -1 a použít maximální haldu, abychom získali efekt minimální haldy. Nejen, že můžeme použít vlastní metodu třídění nahrazením větší s funkcí vlastního komparátoru.
java matematická třída
Metody prioritní fronty
Následující seznam všech metod třídy std::priority_queue:
Metoda | Definice |
---|---|
prioritní_fronta::empty() | Vrací, zda je fronta prázdná. |
prioritní_fronta::velikost() | Vrátí velikost fronty. |
prioritní_fronta::top() | Vrátí odkaz na nejvyšší prvek fronty. |
prioritní_fronta::push() | Přidá prvek „g“ na konec fronty. |
prioritní_fronta::pop() | Odstraní první prvek fronty. |
prioritní_fronta::swap() | Používá se k výměně obsahu dvou front za předpokladu, že fronty musí být stejného typu, i když velikosti se mohou lišit. |
prioritní_fronta::emplace() | Používá se k vložení nového prvku do kontejneru prioritní fronty. |
typ_hodnoty prioritní fronty | Představuje typ objektu uloženého jako prvek ve frontě priority. Funguje jako synonymum pro parametr šablony. |
Operace na prioritní frontě v C++
1. Vkládání a odebírání prvků prioritní fronty
The TAM() metoda se používá k vložení prvku do prioritní fronty. Chcete-li odebrat prvek z prioritní fronty, použijte pop() Tato metoda se používá, protože odstraní prvek s nejvyšší prioritou.
Níže je uveden program C++ pro různé funkce v prioritní frontě:
seznam šipek
C++
// C++ Program to demonstrate various> // method/function in Priority Queue> #include> #include> using> namespace> std;> // Implementation of priority queue> void> showpq(priority_queue<> int> >gq)> {> > priority_queue<> int> >g = gq;> > while> (!g.empty()) {> > cout <<> << g.top();> > g.pop();> > }> > cout <<> '
'> ;> }> // Driver Code> int> main()> {> > priority_queue<> int> >gquiz;> > // used in inserting the element> > gquiz.push(10);> > gquiz.push(30);> > gquiz.push(20);> > gquiz.push(5);> > gquiz.push(1);> > cout <<> 'The priority queue gquiz is : '> ;> > > // used for highlighting the element> > showpq(gquiz);> > // used for identifying the size> > // of the priority queue> > cout <<> '
gquiz.size() : '> <<> > gquiz.size();> > // used for telling the top element> > // in priority queue> > cout <<> '
gquiz.top() : '> <<> > gquiz.top();> > // used for popping the element> > // from a priority queue> > cout <<> '
gquiz.pop() : '> ;> > gquiz.pop();> > showpq(gquiz);> > return> 0;> }> |
>
>Výstup
The priority queue gquiz is : 30 20 10 5 1 gquiz.size() : 5 gquiz.top() : 30 gquiz.pop() : 20 10 5 1>
Viz konec pro analýzu složitosti.
Poznámka : Výše zobrazená je jedna z metod inicializace prioritní fronty. Chcete-li se dozvědět více o efektivní inicializaci prioritní fronty, klikněte sem.
2. Přístup k hornímu prvku prioritní fronty
K hornímu prvku prioritní fronty lze přistupovat pomocí horní() metoda.
C++
// C++ program to access the top> // element of priority queue> #include> #include> using> namespace> std;> // Driver code> int> main()> {> > // create a priority queue of int> > priority_queue<> int> >čísla;> > // add items to priority_queue> > numbers.push(1);> > numbers.push(20);> > numbers.push(7);> > // get the element at the top> > cout <<> 'Top element: '> <<> > numbers.top();> > return> 0;> }> |
>
>Výstup
Top element: 20>
Viz konec pro analýzu složitosti.
Poznámka: Máme přístup pouze k hornímu prvku v prioritní frontě.
3. Chcete-li zkontrolovat, zda je prioritní fronta prázdná nebo ne:
Ke kontrole, zda je fronta priority prázdná, používáme metodu empty(). Tato metoda vrací:
- True – Je vrácena, když je prioritní fronta prázdná a je reprezentována 1 False – Je vytvořena, když prioritní fronta není prázdná nebo False a je charakterizována 0
Příklad:
C++
// C++ program to demonstrate> // Implementation of empty() function> #include> #include> using> namespace> std;> // Driver code> int> main()> {> > priority_queue<> int> >pqueueGFG;> > pqueueGFG.push(1);> > > // Priority Queue becomes 1> > // check if it is empty or not> > if> (pqueueGFG.empty())> > {> > cout <<> 'Empty or true'> ;> > }> > else> > {> > cout <<> 'Contains element or False'> ;> > }> > return> 0;> }> |
>
>Výstup
Contains element or False>
Viz konec pro analýzu složitosti.
4. Chcete-li získat/zkontrolovat velikost prioritní fronty
Určuje velikost prioritní fronty. Jednoduše řečeno, velikost() metoda se používá k získání počtu prvků přítomných v Prioritní fronta .
Níže je uveden program C++ pro kontrolu velikosti prioritní fronty:
C++
// C++ program to demonstrate the> // size() method of priority queue> #include> #include> using> namespace> std;> // Driver code> int> main()> {> > // create a priority queue of string> > priority_queue pqueue;> > // add items to priority_queue> > pqueue.push(> 'Geeks'> );> > pqueue.push(> 'for'> );> > pqueue.push(> 'Geeks'> );> > pqueue.push(> 'C++'> );> > // get the size of queue> > int> size = pqueue.size();> > cout <<> 'Size of the queue: '> << size;> > return> 0;> }> |
>
>Výstup
Size of the queue: 4>
Viz konec pro analýzu složitosti.
podmíněný operátor v jazyce Java
5. Zaměnit obsah prioritní fronty za jinou podobného typu
Swap() Funkce se používá k výměně obsahu jedné prioritní fronty s jinou prioritní frontou stejného typu a stejné nebo různé velikosti.
Níže je uveden program C++ pro výměnu obsahu prioritní fronty za jinou podobného typu:
C++
// CPP program to illustrate> // Implementation of swap() function> #include> using> namespace> std;> // Print elements of priority queue> void> print(priority_queue<> int> >pq)> {> > while> (!pq.empty()) {> > cout << pq.top() <<> ;> > pq.pop();> > }> > cout << endl;> }> int> main()> {> > // priority_queue container declaration> > priority_queue<> int> >pq1;> > priority_queue<> int> >pq2;> > // pushing elements into the 1st priority queue> > pq1.push(1);> > pq1.push(2);> > pq1.push(3);> > pq1.push(4);> > // pushing elements into the 2nd priority queue> > pq2.push(3);> > pq2.push(5);> > pq2.push(7);> > pq2.push(9);> > cout <<> 'Before swapping:-'> << endl;> > cout <<> 'Priority Queue 1 = '> ;> > print(pq1);> > cout <<> 'Priority Queue 2 = '> ;> > print(pq2);> > // using swap() function to swap elements of priority> > // queues> > pq1.swap(pq2);> > cout << endl <<> 'After swapping:-'> << endl;> > cout <<> 'Priority Queue 1 = '> ;> > print(pq1);> > cout <<> 'Priority Queue 2 = '> ;> > print(pq2);> > return> 0;> }> // This code is contributed by Susobhan Akhuli> |
>
>Výstup
Before swapping:- Priority Queue 1 = 4 3 2 1 Priority Queue 2 = 9 7 5 3 After swapping:- Priority Queue 1 = 9 7 5 3 Priority Queue 2 = 4 3 2 1>
Viz konec pro analýzu složitosti.
6. Chcete-li vložit nový prvek do kontejneru fronty priority
Umístit() Funkce slouží k vložení nového prvku do kontejneru prioritní fronty, nový prvek je přidán do prioritní fronty podle své priority. Je to podobné jako u tlačného provozu. Rozdíl je v tom, že operace emplace() šetří zbytečnou kopii objektu.
Níže je uveden program C++ pro vložení nového prvku do kontejneru prioritní fronty:
volání funkce javascript z html
C++
// CPP program to illustrate> // Implementation of emplace() function> #include> using> namespace> std;> int> main()> {> > priority_queue<> int> >pq;> > pq.emplace(1);> > pq.emplace(2);> > pq.emplace(3);> > pq.emplace(4);> > pq.emplace(5);> > pq.emplace(6);> > // Priority queue becomes 1, 2, 3, 4, 5, 6> > // Printing the priority queue> > cout <<> 'Priority Queue = '> ;> > while> (!pq.empty()) {> > cout << pq.top() <<> ;> > pq.pop();> > }> > return> 0;> }> // This code is contributed by Susobhan Akhuli> |
>
>Výstup
Priority Queue = 6 5 4 3 2 1>
Viz konec pro analýzu složitosti.
7. K reprezentaci typu objektu uloženého jako prvek ve frontě priority
Metoda priority_queue :: value_type je vestavěná funkce v C++ STL, která představuje typ objektu uložený jako prvek ve frontě priority. Funguje jako synonymum pro parametr šablony.
Syntax:
priority_queue::value_type variable_name>
Níže je uveden program C++, který představuje typ objektu uloženého jako prvek ve frontě priority:
C++
// C++ program to illustrate the> // priority_queue :: value_type function> #include> using> namespace> std;> // Driver code> int> main()> {> > // declare integer value_type for priority queue> > priority_queue<> int> >::typ_hodnoty AnInt;> > // declare string value_type for priority queue> > priority_queue::value_type AString;> > // Declares priority_queues> > priority_queue<> int> >q1;> > priority_queue q2;> > // Here AnInt acts as a variable of int data type> > AnInt = 20;> > cout <<> 'The value_type is AnInt = '> << AnInt << endl;> > q1.push(AnInt);> > AnInt = 30;> > q1.push(AnInt);> > cout <<> 'Top element of the integer priority_queue is: '> > << q1.top() << endl;> > // here AString acts as a variable of string data type> > AString => 'geek'> ;> > cout << endl> > <<> 'The value_type is AString = '> << AString> > << endl;> > q2.push(AString);> > AString => 'for'> ;> > q2.push(AString);> > AString => 'geeks'> ;> > q2.push(AString);> > cout <<> 'Top element of the string priority_queue is: '> > << q2.top() << endl;> > return> 0;> }> // This code is contributed by Susobhan Akhuli> |
>
>Výstup
The value_type is AnInt = 20 Top element of the integer priority_queue is: 30 The value_type is AString = geek Top element of the string priority_queue is: geeks>
Viz konec pro analýzu složitosti.
Složitost všech operací:
Metody registrovat paměť | Časová složitost | Pomocný prostor |
---|---|---|
prioritní_fronta::empty() | O(1) | O(1) |
prioritní_fronta::velikost() | O(1) | O(1) |
prioritní_fronta::top() | O(1) | O(1) |
prioritní_fronta::push() | O(logN) | O(1) |
prioritní_fronta::pop() | O(logN) | O(1) |
prioritní_fronta::swap() | O(1) | NA) |
prioritní_fronta::emplace() | O(logN) | O(1) |
typ_hodnoty prioritní fronty | O(1) | O(1) |