优先级队列是一种容器适配器,经过专门设计,以使队列的第一个元素在队列中的所有元素中占最大比例。
priority_queue :: emplace()
此函数用于将新元素插入优先级队列容器,该新元素将添加到优先级队列的顶部。
句法 :
priorityqueuename.emplace(value)
Parameters :
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
#include
using namespace std;
int main()
{
priority_queue 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
#include
using namespace std;
int main()
{
priority_queue 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
#include
#include
using namespace std;
int main()
{
priority_queue 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
#include
using namespace std;
int main()
{
int c = 0;
// Empty Priority Queue
priority_queue 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
using namespace std;
int main()
{
// declaring priority queue
priority_queue> 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 p = pqueue.top();
cout << p.first << " "
<< p.second << endl;
pqueue.pop();
}
return 0;
}
输出:
b 25
a 24
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。