Я практикую использование очередей с приоритетами с пользовательским типом данных в C ++.
У меня Person.hpp как
#include <stdio.h>
class Person {
int age;
int height;
int weight;
public:
Person(int _age, int _height, int _weight);
int getAge();
int getHeight();
int getWeight();
};
и Person.cpp как
#include "Person.hpp"
#include <queue>
using namespace std;
Person::Person(int _age, int _height, int _weight){
this->age = _age;
this->height = _height;
this->weight = _weight;
priority_queue<Person, vector<Person>, cmpAge > pqAge;
priority_queue<Person, vector<Person>, cmpHeight > pqHeight;
}
int Person::getAge(){
return this->age;
}
int Person::getHeight(){
return this->height;
}
int Person::getWeight(){
return this->weight;
}
class cmpAge{
public:
int operator()(Person *a, Person *b) {
return a->getAge() > b->getAge();
}
};
class cmpHeight{
public:
int operator()(Person *a, Person *b) {
return a->getHeight() < b->getHeight();
}
};
Вы могли видеть, что в моем Person.cpp я пытался иметь две приоритетные очереди в качестве моих атрибутов, каждая с собственным компаратором.Способ, которым я научился писать пользовательский компаратор, состоит в том, чтобы написать его как альтернативный класс и определить оператор в нем.
В этом случае я написал компаратор, пытающийся сформировать минимальную кучу для возраста человека и максимальную кучу для роста человека.
Однако, когда я пытался построитьпрограмма жалуется компилятору
Использование необъявленного идентификатора 'cmpAge'
Использование необъявленного идентификатора 'cmpHeight'
Основная причина, по которой я хочу, чтобы они были полями, заключается в том, что позже я напишу другие методы в классе Person для выполнения действий в этих очередях.
Так что же является правильным способом добавить priority_queue в класс какатрибут с пользовательским компаратором?
Спасибо, ребята!