优先队列自定义结构体的使用
优先队列
priority_queue,里面有三个参数可以传递,template <typename T, typename Container=std::vector
第一个是存储对象类型,第二个是存储元素所用容器默认vector,第三个是函数对象默认为less从小到大排,堆顶为最大值,若想小使用greater
自定义结构记得要重构<符号
记录一下使用自定义结构的使用
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 定义一个自定义结构体
struct Person {
string name;
int age;
// 构造函数
Person(string n, int a) : name(n), age(a) {}
// 重载小于运算符
friend bool operator<(Person p1,Person p2) {
// 这里定义按照年龄从小到大排序
return p1.age < p2.age;
}
};
int main() {
// 定义优先队列,指定元素类型为Person,并传入自定义比较器
priority_queue<Person> pq;
//默认从小到大所以不需要后两个
// 向优先队列中插入元素
pq.push(Person("Alice", 30));
pq.push(Person("Bob", 25));
pq.push(Person("Charlie", 35));
// 从优先队列中弹出元素,会按照自定义的比较器规则进行排序
while (!pq.empty()) {
Person p = pq.top();
cout << "Name: " << p.name << ", Age: " << p.age << endl;
pq.pop();
}
return 0;
}
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 定义一个自定义结构体
struct Person {
string name;
int age;
// 构造函数
Person(string n, int a) : name(n), age(a) {}
// 重载大于运算符
friend bool operator>(Person p1,Person p2) {
// 这里定义按照年龄从大到小排序
return p1.age > p2.age;
}
};
int main() {
// 定义优先队列,指定元素类型为Person,并传入自定义比较器
priority_queue<Person,vector<Person>,greater<Person>> pq;
// 向优先队列中插入元素
pq.push(Person("Alice", 30));
pq.push(Person("Bob", 25));
pq.push(Person("Charlie", 35));
// 从优先队列中弹出元素,会按照自定义的比较器规则进行排序
while (!pq.empty()) {
Person p = pq.top();
cout << "Name: " << p.name << ", Age: " << p.age << endl;
pq.pop();
}
return 0;
}

浙公网安备 33010602011771号