Предположим, у меня есть простой класс, подобный этому:
class Test {
public:
Test(int reference) { m_reference = reference; }
void feed(int x) { m_data.push_back(x); }
int get() { return m_data.front(); }
private:
int m_reference;
std::vector<int> m_data;
};
Вместо std::vector
, я хотел бы передать значения в std::priority_queue
.Вместо того, чтобы возвращать значение .front()
, я бы хотел .get()
значение .top()
priority_queue
на основе пользовательской функции сравнения.Допустим, это пользовательское сравнение вычисляется как абсолютная разница между значением и экземпляром reference
.
У меня нет понятия , как объявить std::priority_queue
в моих атрибутах класса.
Я пытался:
bool compare(int a, int b) {
return std::abs(a - m_reference) < std::abs(b - m_reference);
}
А потом:
std::priority_queue<int, std::vector<int>, decltype(&Test::compare)> m_priority;
Я также пытался с std::function
, как это, но это вызывает несколько ошибок:
std::function<bool(int a, int b)>> pq([this](int a, int b){
return std::abs(a - m_reference) < std::abs(b - m_reference);
});
Но это не сработает (см. Repl.it ).
Есть идеи, как решить эту проблему, пожалуйста?