2017-02-07 9 views
-1

こんにちは、私は次のコードを持っている:のstd :: PRIORITY_QUEUE ::ペア<int, int>

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

私は分ヒープ機能を使用しようとしています。 私はまだ2時間の検索をしてもまだ明確な答えを得ることができません。 私は多くの人がカスタム比較関数を書くのを見ましたが、それはかなり標準的な操作だと思います。私がstd ::より大きい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

あなたは[STD :: PRIORITY_QUEUE](http://en.cppreference.com/w/cpp/container/priority_queue)のドキュメントを見ていましたか?コンパイラとしてではなく、 'std :: greater'を' Container'として渡そうとしています。 –

答えて

2

priority_queue第2のテンプレートパラメータは、使用する基礎となるコンテナタイプではなく、比較演算子を使用します。それを明示的に指定することができstd::vector<T>デフォルトは、:

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

Markありがとうございました。それだった。 – Illia

+0

'QueueItem = std :: pairを使用して書き込みます。; – knst

関連する問題