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.
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.
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.