Abbiamo un question, che spiega come utilizzare un comparatore in priority_queue
in C++. Dà il sovraccarico operator
class
(o struct
) come terzo argomento e funziona correttamente. Ma la funzione bool
non funziona. Perché ? Ma funziona bene nello sort
dello <algorithm>
. Quando ho esaminato i documenti (priority_queue & & algo/sort), entrambi considerano lo class Compare
come terzo argomento opzionale.Perché il comparatore di funzioni non funziona nella coda di priorità come fa in ordinamento?
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp (const int &a,const int &b){ return a > b; }
struct cmp2
{
bool operator() (const int &p1,const int &p2)
{
return p1 > p2;
}
};
int main()
{
// freopen("test.txt","r",stdin);
int a[10];
vector<int> b(10);
sort(a , a + 10, cmp); // working cool
sort(b.begin() , b.end() , cmp); // working great
priority_queue<int, vector<int> , cmp2 > x; // as usual, working....
priority_queue<int, vector<int> , cmp > y; // not working why ?
return 0;
}
Errori:
A:\pqvsarray.cpp In function 'int main()':
27 40 A:\pqvsarray.cpp [Error] type/value mismatch at argument 3 in template parameter list for 'template<class _Tp, class _Sequence, class _Compare> class std::priority_queue'
27 40 A:\pqvsarray.cpp [Error] expected a type, got 'cmp'
27 43 A:\pqvsarray.cpp [Error] invalid type in declaration before ';' token
Quindi, perché la differenza?
Perché il modello priority_queue richiede un tipo, ma si sta assegnando un puntatore a funzione. –
Quindi, come/perché 'sort' prende un' function pointer'? – azam
@ SelçukCihan Secondo [la documentazione priority_queue] (http://www.cplusplus.com/reference/queue/priority_queue/), può essere un puntatore a funzione: * Questo può essere un puntatore a funzione o un oggetto funzione * – Aracthor