優先級隊列是一種容器適配器,經過專門設計,使得隊列的第一個元素在隊列中的所有元素中占最大。
priority_queue::emplace()
此函數用於將新元素插入優先級隊列容器,該新元素將添加到優先級隊列的頂部。
用法:
priorityqueuename.emplace(value) 參數: The element to be inserted into the priority queue is passed as the parameter. Result: The parameter is added to the priority queue at the top position.
例子:
Input :mypqueue{5, 4}; mypqueue.emplace(6); Output:mypqueue = 6, 5, 4 Input :mypqueue{}; mypqueue.emplace(4); Output:mypqueue = 4
注意:在priority_queue容器中,這些元素以相反的順序打印,因為先打印頂部,然後再移動到其他元素。
錯誤和異常
1.它具有強大的異常保證,因此,如果引發異常,則不會進行任何更改。
2.參數應與容器的類型相同,否則將引發錯誤。
// INTEGER PRIORITY QUEUE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> mypqueue;
mypqueue.emplace(1);
mypqueue.emplace(2);
mypqueue.emplace(3);
mypqueue.emplace(4);
mypqueue.emplace(5);
mypqueue.emplace(6);
// queue becomes 1, 2, 3, 4, 5, 6
// printing the priority queue
cout << "mypqueue = ";
while (!mypqueue.empty()) {
cout << mypqueue.top() << " ";
mypqueue.pop();
}
return 0;
}
輸出:
mypqueue = 6 5 4 3 2 1
// CHARACTER PRIORITY QUEUE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<char> mypqueue;
mypqueue.emplace('A');
mypqueue.emplace('b');
mypqueue.emplace('C');
mypqueue.emplace('d');
mypqueue.emplace('E');
mypqueue.emplace('f');
// queue becomes A, b, C, d, E, f
// printing the priority queue
cout << "mypqueue = ";
while (!mypqueue.empty()) {
cout << mypqueue.top() << " ";
mypqueue.pop();
}
return 0;
}
輸出:
mypqueue = f d b E C A
// STRING PRIORITY QUEUE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main()
{
priority_queue<string> mypqueue;
mypqueue.emplace("portal");
mypqueue.emplace("computer science");
mypqueue.emplace("is a");
mypqueue.emplace("GEEKSFORGEEKS");
// queue becomes portal, computer scince,
// is a, GEEKSFORGEEKS
// printing the priority queue
cout << "mypqueue = ";
while (!mypqueue.empty()) {
cout << mypqueue.top() << " ";
mypqueue.pop();
}
return 0;
}
輸出:
mypqueue = portal is a computer science GEEKSFORGEEKS
應用:
給定多個整數,使用emplace()將它們添加到優先級隊列中,並找到優先級隊列的大小。
Input:5, 13, 0, 9, 4 Output:5
算法
1.使用emplace()一次將給定元素插入優先級隊列容器。
2.繼續彈出優先級隊列的元素,直到其變空,然後遞增計數器變量。
3.打印計數器變量。
// CPP program to illustrate
// Application of emplace() function
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int c = 0;
// Empty Priority Queue
priority_queue<int> pqueue;
// inserting elements into priority_queue
pqueue.emplace(5);
pqueue.emplace(13);
pqueue.emplace(0);
pqueue.emplace(9);
pqueue.emplace(4);
// Priority queue becomes 13, 9, 5, 4, 0
// Counting number of elements in queue
while (!pqueue.empty()) {
pqueue.pop();
c++;
}
cout << c;
}
輸出:
5
時間複雜度:O(1)
emplace()和push()
當我們使用push()時,我們創建一個對象,然後將其插入priority_queue。使用emplace(),該對象就地構建並保存不必要的副本。有關詳細信息,請參見C++ STL中的emplace vs insert。
// C++ code to demonstrate difference between
// emplace and insert
#include<bits/stdc++.h>
using namespace std;
int main()
{
// declaring priority queue
priority_queue<pair<char, int>> pqueue;
// using emplace() to insert pair in-place
pqueue.emplace('a', 24);
// Below line would not compile
// pqueue.push('b', 25);
// using push() to insert pair
pqueue.push(make_pair('b', 25));
// printing the priority_queue
while (!pqueue.empty()) {
pair<char, int> p = pqueue.top();
cout << p.first << " "
<< p.second << endl;
pqueue.pop();
}
return 0;
}
輸出:
b 25 a 24
相關用法
- C++ map emplace()用法及代碼示例
- C++ set::emplace()用法及代碼示例
- C++ stack emplace()用法及代碼示例
- C++ multimap::emplace()用法及代碼示例
- C++ unordered_map emplace()用法及代碼示例
- C++ queue::emplace()用法及代碼示例
- C++ multiset::emplace()用法及代碼示例
- C++ deque emplace用法及代碼示例
- C++ vector emplace()用法及代碼示例
- C++ list emplace()用法及代碼示例
- C++ unordered_multimap emplace()用法及代碼示例
- C++ unordered_multiset emplace()用法及代碼示例
- C++ unordered_set emplace()用法及代碼示例
注:本文由純淨天空篩選整理自AyushSaxena大神的英文原創作品 priority_queue emplace() in C++ STL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。