2012-10-02 5 views
14

우선 순위 대기열에 쌍을 저장하려고하는데 각 쌍의 두 번째 값을 비교하는 비교 기능을 사용하고 있습니다. 나는이를 컴파일 할 때내부 우선 순위 대기열 쌍

#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에 새로운 오전 오류를 얻을. CompareDist 인자이어야하며 두 번째 인수는 ( value_type 있음) 용기이어야 말하면

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

다음과 같이 :이 같은 priority_queue 보이는 것입니다

답변

34

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

또한 priority_queue은 "컨테이너 어댑터"입니다. 다른 컨테이너가 기본 컨테이너로 사용되며 priority_queue에는 액세스하기위한 특수 멤버 함수가 있습니다. 컨테이너 어댑터의 또 다른 예는 std :: stack입니다.

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

priority_queue의 inbuilt 템플리트에 두 번째 인수를 제공해야합니다.