gpt4 book ai didi

c++ - 如何使优先级队列使用自定义类中的变量(升序/降序)

转载 作者:行者123 更新时间:2023-11-27 23:46:19 30 4
gpt4 key购买 nike

我在使用 C++ 中的 priority_queue 时遇到问题,我有一个优先级队列 vector ,优先级队列包含多个 Person 对象。现在,我希望 priority_queue 根据年龄对 Person 对象进行优先级排序。所以我有这样的东西:

class Person
{
public:
string name;
int height;
int age;
};

std::vector<std::priority_queue<Person*>> Persons;

我如何确保无论何时将某人添加到其中一个优先队列中,都会根据他们的年龄对他们进行优先排序?我该如何按升序/降序排列?

最佳答案

您实际上不需要包装 priority_queue 的额外 vector ,因为 priority_queue 本身有 2 个额外的默认参数:(第一个是类型,在您的例子中是 Person*),第二个是容器类型,第三个是比较谓词。在下面,您可以看到使用 lambda 函数作为优先级队列的比较谓词。

#include <vector>
#include <string>
#include <queue>
#include <iostream>

using namespace std;

class Person
{
public:
string name;
int height;
int age;

Person(string n, int h, int a): name(n), height(h), age(a) {}
};


ostream& operator<<(ostream &cout, const Person* p) {
return cout << p->name << " height=" << p->height << " age=" << p->age << " ";
}

int main()
{
auto cmp = [](const Person* pl, const Person* pr) {
return (pl->age < pr->age);
};

priority_queue<Person*, vector<Person*>, decltype(cmp)> persons(cmp);

persons.push(new Person("a", 100, 10));
persons.push(new Person("b", 120, 20));
persons.push(new Person("c", 110, 15));

while (!persons.empty()) {
cout << persons.top() << endl;
persons.pop();
}

return 0;
}

关于c++ - 如何使优先级队列使用自定义类中的变量(升序/降序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50329119/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com