Пара внутри приоритетной очереди
Я пытаюсь хранить пары в очереди приоритетов и использую функцию сравнения, которая сравнивает второе значение каждой пары.
#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.
2 ответа:
Вот как выглядит 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.