Frage zu priority_queue mit eigener compare-Funktion
-
Hallo zusammen!
Ich möchte eine priority_queue mit zugrundeliegendem vector<int> benutzen, dazu aber nicht den Standard-Vergleichsoperator operator< von int, sondern meinen eigenen, also in
priority_queue< int, vector<int>, greater<int> > pq;
statt greater<int> meine eigene Vergleichsfunktion. Und das ganze wenn möglich ohne struct.
Geht das?
Danke für Lösungen!
Ciao, Fin
-
Was erwartest du?
Grundsätzlich sähe ein entsprechendes Vergleichsstruct ungefähr so aus:
struct Compare { bool operator () (int i, int j) { return ((i * 1337) % 42) < ((j * 1337) % 42); } };Dann benutzt du statt greater<int> Compare, sonst gibts nichts. Oder hab ich deine Frage überlesen?
/edit Oh, hab ich tatsächlich. Es sollte auch etwa so gehen:
priority_queue<int, deque, bool (int, int)> p (&fun);
-
Kannst Du mal ein Beispiel bringen?
Egal, wie ich es mache, es gibt immer eine neue Fehlermeldung...
z.B.
bool test(int a, int b) { if (a > b) return true; else return false; } int main() { priority_queue<int, vector<int>, test() > pq;Gibt die Fehlermeldung:
error: `bool test(int, int)' cannot appear in a constant-expression
-
schau dir doch mal das obige Beispiel an - richtig heißt es:
priority_queue<int,vector<int>,bool(int,int)> pq(test); // ^^Typ(Funktion) ^Exemplar
-
So klappt's aber leider auch nicht:
/usr/lib/gcc/x86_64-redhat-linux/3.4.4/../../../../include/c++/3.4.4/bits/stl_queue.h: In instantiation of `std::priority_queue<int, std::vector<int, std::allocator<int> >, bool ()(int, int)>': priority.cpp:31: instantiated from here /usr/lib/gcc/x86_64-redhat-linux/3.4.4/../../../../include/c++/3.4.4/bits/stl_queue.h:359: error: field `std::priority_queue<int, std::vector<int, std::allocator<int> >, bool ()(int, int)>::comp' invalidly declared function type gmake: *** [priority.o] Error 1Mit der
structLösung hat's funktioniert, vielleicht geht's ja auch nicht anders.
Danke für die Hilfe soweit

-
Es scheint nur mit Pointern zu funktionieren:
std::priority_queue<int, std::vector<int>, bool (*) (int, int)> p (&test);kompiliert.