优先队列自定义结构体的使用

优先队列

priority_queue,里面有三个参数可以传递,template <typename T, typename Container=std::vector, typename Compare=std::less> class priority_queue

第一个是存储对象类型,第二个是存储元素所用容器默认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;
}
posted @ 2024-02-23 18:41  Nijika  阅读(74)  评论(0)    收藏  举报