C++ priority_queue avec lambda comparateur d'erreur
J'ai le texte suivant code erroné, que j'essaie de compiler dans VC2010, mais j'obtiens le message d'erreur C2974 cela se produit uniquement lorsque je inclure l'expression lambda, donc je suppose qu'il a quelque chose à voir avec cela.
typedef pair<pair<int, int>, int> adjlist_edge;
priority_queue< adjlist_edge , vector<adjlist_edge>,
[](adjlist_edge a, adjlist_edge b) -> bool {
if(a.second > b.second){ return true; } else { return false; }
}> adjlist_pq;
Je sais que la forme de la définition de modèle est correct comme
priority_queue<int , vector<int>, greater<int>> pq;
Fonctionne comme prévu. Les idées de ce que je fais mal? Est-il quelque chose de manifestement mal avec le lambda qui regarde le mal que j'ai peut-être oublié? Merci pour la lecture!
- Doublon potentiel de stackoverflow.com/questions/3867276/...
Vous devez vous connecter pour publier un commentaire.
D'abord définir le lambda de l'objet, puis de le passer au modèle du type à l'aide de
decltype
et aussi passer directement au constructeur.priority_queue
ne peut construire une fonction de comparaison de l'objet par la copie.priority_queue
prend le comparateur comme un argument de modèle. Lambda fonctions sont des objets, et ne peut donc pas être utilisés comme arguments de modèle (très peu de types peut être, parmi eux, les types intégraux).Vous pouvez essayer d'utiliser
decltype
là:Défaut (et il), vous pouvez utiliser
function<>
:function
.>
à lapriority_queue
. Ne pouvait pas modifier à cause de la 6 char. exigence.