web-dev-qa-db-fra.com

Paire dans la file d'attente prioritaire

J'essaie de stocker des paires dans la file d'attente prioritaire et j'utilise une fonction de comparaison qui compare la deuxième valeur de chaque paire.

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

Quand je compile cela, j'obtiens une erreur

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

Quelle pourrait être la raison. Je suis nouveau à STL.

23
g4ur4v

Voici à quoi ressemble Priority_queue :

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

En d'autres termes, CompareDist doit être le troisième argument et le deuxième argument doit être le conteneur (qui a value_type), comme suit:

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

Notez également que priority_queue est ce qu'on appelle un "adaptateur de conteneur". Un autre conteneur est utilisé comme conteneur sous-jacent et la priorité_queue possède des fonctions membres spéciales pour y accéder. Un autre exemple d'adaptateur de conteneur serait std :: stack.

45
Jesse Good
priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;

vous devez fournir un deuxième argument pour le modèle intégré de priority_queue.

3
RAMENDRA SINGH