web-dev-qa-db-ja.com

優先キュー内のペア

ペアを優先度キューに格納しようとしています。各ペアの2番目の値を比較する比較機能を使用しています。

#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を初めて使用します。

23
g4ur4v

priority_queue は次のようになります。

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

つまり、CompareDistthird引数で、2番目の引数はコンテナ(value_type)、次のように:

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

また、priority_queueは、いわゆる「コンテナーアダプター」です。別のコンテナーが基礎となるコンテナーとして使用され、priority_queueには、それにアクセスするための特別なメンバー関数があります。コンテナーアダプターの別の例はstd :: stackです。

45
Jesse Good
priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;

priority_queueの組み込みテンプレートに2番目の引数を指定する必要があります。

3
RAMENDRA SINGH