На самом деле вам не нужен дополнительный вектор, который оборачивает ваш файл priority_queue, поскольку у самого priority_queue есть 2 дополнительных аргумента по умолчанию:
(первый - это тип, в вашем случае Person *), второй - тип контейнера, а третий - предикат сравнения.
ниже вы можете увидеть использование лямбда-функции в качестве предиката сравнения для вашей очереди приоритетов.
#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;
}