Пара внутри очереди приоритетов

Я пытаюсь хранить пары в очереди приоритетов, и я использую функцию сравнения, которая сравнивает второе значение каждой пары.

#include<iostream>
#include<queue>
#include<utility>
using namespace std;

class CompareDist
{
public:
    bool operator()(pair<int,int> n1,pair<int,int> n2) {
        return n1.second>n2.second;
    }
};
int main()
{
    priority_queue<pair<int,int>,CompareDist> pq;
}

Когда я скомпилирую это, я получаю сообщение об ошибке

error: no type named ‘value_type in ‘class CompareDist

Что может быть причиной. Я новичок в STL.

Ответ 1

Вот что выглядит priority_queue:

template<
    class T,
    class Container = std::vector<T>, 
    class Compare = std::less<typename Container::value_type>
> class priority_queue;

Другими словами, CompareDist должен быть третьим аргументом, а вторым аргументом должен быть контейнер (который имеет value_type), как value_type ниже:

priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;

Также обратите внимание, что priority_queue - это так называемый "контейнерный адаптер". В качестве основного контейнера используется другой контейнер, а функция priority_queue имеет специальные функции для доступа к нему. Другим примером адаптера контейнера будет std :: stack.

Ответ 2

priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;

вам нужно предоставить второй аргумент для встроенного шаблона priority_queue.