2012-10-02 45 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’ 

可能是什麼reason.I是新來的STL。

回答

34

這是priority_queue看起來像:

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

換句話說,CompareDist應該是第三參數和第二參數應該是在容器(其具有value_type),如下所示:

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模板提供第二個參數。