30

ペアをプライオリティ キューに格納しようとしており、各ペアの 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を初めて使用します。

4

2 に答える 2

51

これは、priority_queueがどのように見えるかです:

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

つまり、次CompareDistのように、 を3 番目の引数にし、2 番目の引数をコンテナー ( を持つvalue_type) にする必要があります。

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

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

于 2012-10-02T07:10:29.483 に答える