📅  最后修改于: 2023-12-03 15:22:41.713000             🧑  作者: Mango
优先队列(Priority Queue)是一个有序队列,每个元素都有一个优先级,优先级最高的元素最先被取出。本文将为程序员介绍初始化优先队列的有效方法。
在C++中,STL库提供了优先队列容器——std::priority_queue
。使用该容器时,我们可以通过构造函数来初始化一个为空的优先队列。
#include <queue>
std::priority_queue<int> pq;
上述代码将创建一个名称为pq
的整型优先队列。
默认情况下,std::priority_queue
以降序排序,即优先级最高的元素会排在最前面。如果需要升序排序,则可以如下初始化:
#include <queue>
std::priority_queue<int, std::vector<int>, std::greater<int>> pq2;
上述代码创建一个名称为pq2
的整型优先队列,且以升序排序。
除了使用构造函数初始化一个空的优先队列,我们还可以通过lambda表达式来指定排序规则。
#include <queue>
auto cmp = [](int a, int b) { return a > b; };
std::priority_queue<int, std::vector<int>, decltype(cmp)> pq(cmp);
上述代码创建了一个名称为pq
的整型优先队列,并指定了降序排序规则。其中,decltype(cmp)
表示指定比较函数的类型为cmp
的类型。
如果我们需要升序排序,则可以将lambda表达式修改为:
auto cmp = [](int a, int b) { return a < b; };
std::priority_queue<int, std::vector<int>, decltype(cmp)> pq2(cmp);
上述代码创建了一个名称为pq2
的整型优先队列,并指定了升序排序规则。
如果需要自定义数据类型的优先队列,可以使用自定义结构体来指定排序规则。
#include <queue>
#include <string>
struct Person {
std::string name;
int age;
bool operator<(const Person &p) const {
// 根据年龄来比较大小
return age < p.age;
}
};
std::priority_queue<Person> pq;
// 添加元素
pq.push({"Amy", 20});
pq.push({"Bob", 18});
pq.push({"Cathy", 22});
上述代码创建了一个名称为pq
的自定义数据类型优先队列。由于Person
结构体实现了小于运算符重载函数,因此将会以年龄为优先级进行排序。
总结一下,初始化优先队列的有效方法有:
以上就是初始化优先队列的有效方法。希望对程序员们有所帮助。