如何创建 Min stlpriority_queue?
默认的stl优先级队列是Max 1(Top函数返回最大的元素)。
为简单起见,可以说它是一个 int 值的优先级队列。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
默认的stl优先级队列是Max 1(Top函数返回最大的元素)。
为简单起见,可以说它是一个 int 值的优先级队列。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
您可以通过多种方式做到这一点:
1. 使用
greater
作为比较函数:2. 通过更改符号来插入值(使用减号 (-) 表示正数,使用加号 (+) 表示负数:
3. 使用自定义结构或类:
4. 使用自定义结构或类,您可以按任何顺序使用priority_queue。
假设,我们想根据人们的薪水对他们进行降序排序,如果平局则根据他们的年龄进行排序。
通过运算符重载可以获得相同的结果:
在主函数中:
You can do it in multiple ways:
1. Using
greater
as comparison function :2. Inserting values by changing their sign (using minus (-) for positive number and using plus (+) for negative number :
3. Using custom structure or class :
4. Using custom structure or class you can use priority_queue in any order.
Suppose, we want to sort people in descending order according to their salary and if tie then according to their age.
Same result can be obtained by operator overloading :
In main function :
priority_queue
的第三个模板参数是比较器。将其设置为使用更大
。例如,
对于
std::greater
,您需要#include
。The third template parameter for
priority_queue
is the comparator. Set it to usegreater
.e.g.
You'll need
#include <functional>
forstd::greater
.在 C++11 中,为了方便起见,您还可以创建一个别名:
并像这样使用它:
In C++11 you could also create an alias for convenience:
And use it like this:
解决这个问题的一种方法是,将priority_queue中每个元素的负数压入,这样最大的元素将成为最小的元素。在进行pop操作时,对每个元素取负。
One Way to solve this problem is, push the negative of each element in the priority_queue so the largest element will become the smallest element. At the time of making pop operation, take the negation of each element.
基于上述所有答案,我创建了一个示例代码来了解如何创建优先级队列。 注意:它适用于 C++11 及更高版本的编译器
上述代码的输出
Based on above all answers I created an example code for how to create priority queue. Note: It works C++11 and above compilers
Output of Above code
我们可以使用多种方法来做到这一点。
使用模板比较器参数
使用已定义的比较器类
We can do this using several ways.
Using template comparator parameter
Using used defined compartor class
将值乘以-1并使用最大堆以获得最小堆的效果
Multiply values with -1 and use max heap to get the effect of min heap
使用
std::greater
作为比较函数:Use
std::greater
as the comparison function:一种方法是定义一个合适的比较器,用于对普通优先级队列进行操作,使其优先级反转:
分别输出 1、3、5、8。
通过 STL 和 Sedgewick 的实现 在此处给出 。
One way would be to define a suitable comparator with which to operate on the ordinary priority queue, such that its priority gets reversed:
Which would output 1, 3, 5, 8 respectively.
Some examples of using priority queues via STL and Sedgewick's implementations are given here.