Komparatoren in STL
Ich bin mit struct minHeap zu generieren, die einen min-heap, der priority_queue .Und die Funktion comp drucken, zahlen in umgekehrter Reihenfolge mit sort-Funktion in AWL . Nun meine Frage ist, kann ich nicht verwenden struct minHeap in der Funktion sort und können nicht verwenden Sie die Funktion comp in priorityQueue .
Ich das Gefühl, dass die Funktion der beiden struct minHeap und comp ähnlich ist. Bitte erklären Sie mir, Wann Strukturen für comaprator und bei Verwendung normaler Funktionen zu Verhalten, als Komparatoren in STL ?
#include<iostream>
#include <queue>
#include <stdio.h>
#include<algorithm>
using namespace std;
struct minHeap
{
bool operator()(const int a , const int b )
{
return a>b;
}
};
bool comp(int a , int b)
{
return a>b;
}
int main()
{
priority_queue<int , vector<int> , minHeap > b;
b.push(4);
b.push(23);
b.push(12);
while(b.size()!=0)
{
cout << b.top() << " " ;
b.pop();
}
cout<<"\n" ;
int arr[] = {12,34, 112,12};
sort(arr , arr+4 ,comp);
for(int x= 0 ; x < 4 ; x++)
{
cout << arr[x] << " " ;
}
}
mögliche Duplikate von Vergleich Funktor Typen vs. operator<
InformationsquelleAutor Arpit Agarwal | 2012-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie suchen, im Allgemeinen, wenn Sie Funktionen verwenden zu können, oder wenn die Verwendung funktoren.
Die kurze Antwort ist: Verwenden Sie einen Funktor, wenn, und nur wenn Sie behalten müssen Zustand über mehrere Aufrufe der Betreiber. Zum Vergleich-Funktionen ist dies meist nicht der Fall, aber es gibt andere Fälle von Anwendungen wie Akkus, averagers, min - /max-Taschenrechner, etc.
Andere Frage, die scheint zu decken, ähnlich Boden und kann Ihnen helfen, mit mehr detail und einige große Referenzen auf externe material: Vergleich Funktor Arten vs-operator<
Wie man eine tatsächliche Funktion priority_queue - es ist nicht so offensichtlich, aber es ist möglich:
priority_queue
Beispiel, auch wenn es keinen Zustand zu halten zwischen den anrufen.Sie können tatsächlich - es dauerte eine Weile, um es zu finden aber ich bin Buchung den code jetzt in ein edit.
InformationsquelleAutor Joris Timmermans
Können Sie einen Funktor in
sort()
, überhaupt kein problem:Vielleicht ist Ihr problem war, dass Sie nur mit dem Klassennamen (
minHeap
) anstelle einer Instanz von functor.minHeap()
ist ein Aufruf an den Konstruktor, nicht zuoperator()
.Als für
priority_queue
ist es wie folgt angegeben:Daher müssen Sie eine Klasse name (im Gegensatz zu einer Instanz) für die Dritte Vorlage-argument. Wenn Sie möchten, um eine Funktion zu verwenden, müssen Sie einen Zeiger auf eine Funktion, geben Sie als Dritten template-argument übergeben Sie dann die function-pointer in Konstruktor:
InformationsquelleAutor Gorpik