2011-07-08 52 views
2
#include <iostream> 
#include <queue> 
using namespace std; 

template< typename FirstType, typename SecondType > 
struct PairComparator { 
    bool operator()(const pair<FirstType, SecondType>& p1, const pair<FirstType, SecondType>& p2) const 
    { if(p1.first < p2.first) return true; 
     if(p2.first < p1.first) return false; 
     //return p1.second < p2.second; 
    } 
}; 

priority_queue<pair<int, pair<int, int> > > q; 

int main() { 
    q.push(make_pair(1, make_pair(2,3))); 
    pair<int, pair<int, int> > a = q.top; 
    return 0; 
} 

這給我的錯誤定製比較器用於對優先隊列<整型,對<int, int>>

pqpair.cpp:18: error: conversion from ‘<unresolved overloaded function type>’ 
to non-scalar type ‘std::pair<int, std::pair<int, int> >’ requested 

我發現PairComparator代碼從cplusplus.com論壇

+1

在程序中,您沒有將'PairComparator'作爲比較器傳遞給priority_queue。是不是正在做'std :: less '會做什麼?我們甚至需要使用它嗎? – rajatkhanduja

回答

3
pair<int, pair<int, int> > a = q.top; 

應改爲:

pair<int, pair<int, int> > a = q.top(); 
            ^
+0

謝謝!沒有意識到這是一個簡單的錯誤>> – Billy