C++ STL中的priority_queue emplace()
优先队列是一种容器适配器,特别设计使队列的第一个元素是队列中所有元素中最大或最小的。但在C++ STL中(默认情况下),最大的元素在队列的顶部。我们还可以通过在创建优先队列时简单地传递一个额外的参数来创建具有最小元素在顶部的优先队列。
priority_queue::emplace()
该函数用于将新元素插入到优先队列容器中,新元素将根据其优先级添加到优先队列中。它类似于push操作。不同之处在于emplace()操作可以避免不必要的对象复制。
时间复杂度:O(log n)
语法:
priorityqueuename.emplace(value)
参数:
要插入到优先队列中的元素作为参数传递。
结果:
将参数添加到优先队列的顶部位置。
示例:
注意: 在优先队列容器中,元素是按相反的顺序打印的,因为首先打印顶部,然后再移动到其他元素。
错误和异常
1.它具有强异常保证,因此,如果抛出异常,就不会进行任何更改。
2.参数应与容器的类型相同,否则会引发错误。
输出
输出
输出
应用:
给定一些整数,请使用emplace()将它们添加到优先级队列中,并找到优先级队列的大小。
算法
1. 逐个使用emplace()向优先级队列容器插入给定的元素。
2. 连续弹出优先级队列的元素,直到它变为空,并增加计数器变量。
3. 打印计数器变量。
输出
emplace()与push()的区别
当我们使用push()时,会创建一个对象,然后将其插入优先级队列。而使用emplace(),该对象将原地构造,节省了不必要的副本。请参阅empace vs insert in C++ STL以了解详情。
输出