2017-02-07 12 views
-1

Привет У меня есть следующий код:станд :: priority_queue с стандом :: Пар <int, int>

#include <algorithm> 
#include <queue> 
#include <functional> 
std::priority_queue < std::pair<int, int>, std::greater<std::pair<int, int> > > q; 

Я пытаюсь использовать функциональность мин кучи. У меня есть еще пару часов, но я не могу получить четкий ответ. Я видел, как многие люди пишут пользовательские функции сравнения, но я думаю, что это довольно стандартная операция. Если я выберу std :: greater func, все будет работать так, как ожидалось, но создаст максимальную кучу.

Я получаю 14 ошибок, когда компилирую это.

Error C2039 'value_type': is not a member of 'std::greater<std::pair<int,int>>' 
Error C2146 syntax error: missing '>' before identifier 'value_type'  
Error C2039 'value_type': is not a member of 'std::greater<std::pair<int,int>>' 
Error C3646 'value_type': unknown override specifier  
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int  
Error C2039 'size_type': is not a member of 'std::greater<std::pair<int,int>>' 
Error C3646 'size_type': unknown override specifier  
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int  
Error C2039 'reference': is not a member of 'std::greater<std::pair<int,int>>' 
Error C3646 'reference': unknown override specifier 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int  
Error C2039 'const_reference': is not a member of 'std::greater<std::pair<int,int>>'  
Error C3646 'const_reference': unknown override specifier 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int 
+1

Вы смотрите на документацию [стд :: priority_queue] (http://en.cppreference.com/w/cpp/container/priority_queue)? Вы пытаетесь передать 'std :: greater' как' Container', а не как компаратор. –

ответ

2

Второй параметр шаблон priority_queue является основным типом контейнера для использования, а не оператор сравнения для использования. По умолчанию оно std::vector<T>, которые можно указать в явном виде:

typedef std::pair<int, int> QueueItem; 
std::priority_queue <QueueItem, std::vector<QueueItem>, std::greater<QueueItem> > q; 
+0

Большое спасибо Mark. Это все. – Illia

+0

Напишите 'using QueueItem = std :: pair ;' лучше – knst