2012-10-02 12 views
14

Estoy intentando almacenar pares en cola de prioridad y estoy usando una función de comparación que compara el segundo valor de cada par.Par dentro de la cola de prioridad

#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; 
} 

Cuando compilo este me da un error

error: no type named ‘value_type’ in ‘class CompareDist’ 

Cuáles podrían ser las reason.I Soy nuevo a STL.

Respuesta

34

Esto es lo que priority_queue parece:

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

En otras palabras, CompareDist debería ser el tercer argumento y el segundo argumento debe ser el recipiente (que tiene value_type), como la siguiente:

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

Observe también que priority_queue es lo que se llama un "adaptador de contenedor". Se usa otro contenedor como contenedor subyacente y priority_queue tiene funciones especiales para miembros para acceder a él. Otro ejemplo de un adaptador de contenedor sería std :: stack.

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

debe proporcionar un segundo argumento para la plantilla incorporada de priority_queue.

Cuestiones relacionadas