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

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

#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.

19

Решение

Это то, что priority_queue похоже:

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

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

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

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

41

Другие решения

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

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

2

По вопросам рекламы [email protected]