vector von pointern sortieren mittels prädikat
-
geht aber nicht
Tolle Fehlerbeschreibung.

-
Ok, war doof. Operator kommt gleich
Fehlermeldung: in include algorithm: "term does not evaluate to a function taking 2 arguments"
Und hier die stelle die der compiler moniert:
template<class _RanIt, class _Pr> inline pair<_RanIt, _RanIt> _Unguarded_partition(_RanIt _First, _RanIt _Last, _Pr _Pred) { // partition [_First, _Last), using _Pred _RanIt _Mid = _First + (_Last - _First) / 2; _Median(_First, _Mid, _Last - 1, _Pred); _RanIt _Pfirst = _Mid; _RanIt _Plast = _Pfirst + 1; while (_First < _Pfirst && !_Pred(*(_Pfirst - 1), *_Pfirst) && !_Pred(*_Pfirst, *(_Pfirst - 1))) //***** hier --_Pfirst; while (_Plast < _Last && !_Pred(*_Plast, *_Pfirst) && !_Pred(*_Pfirst, *_Plast)) ++_Plast; _RanIt _Gfirst = _Plast; _RanIt _Glast = _Pfirst;
-
und hier der operator < ( soll ein lexikographischer vergleich sein)
bool Coord::operator<(Coord a) { if(_x<a.x()) return true; else { if(_x == a.x() && _y<a.y()) return true; else if(_x==a.x() && _y==a.y() && _z<a.z()) return true; } return false; }
-
Versuche es mal einfach so:
struct MyGreater { bool operator()( myClass *a, myClass *b ) { return *a < *b; } }; std::sort( vec.begin(), vec.end(), MyGreater() );Edit: btw wundert es mich das es nicht geht. Eigentlich sollte deine Funktion zum Vergleich genauso funktionieren.
-
Die echte Fehlermeldung des Compilers wäre gut.
Aber versuch mal das:
bool vergleiche(myClass * const & a, myClass * const & b) { return *a < *b; }Ok, das ist kappes. Hast du vielleicht noch irgendwo ein vergleiche? Was sagt der Compiler zum Typ von _Pred?
-
MyGreater funktioniert! Vielen Dank an evilissimo und pronto!
-
evilissimo schrieb:
Versuche es mal einfach so:
struct MyGreater { bool operator()( myClass *a, myClass *b ) { return *a < *b; } }; std::sort( vec.begin(), vec.end(), MyGreater() );Edit: btw wundert es mich das es nicht geht. Eigentlich sollte deine Funktion zum Vergleich genauso funktionieren.
Hallo,
sollte man da nicht von std::binary_function ableiten bzw. first_argument_type etc.. dabeipacken?
-
raphael2 hast du noch die komplette ursprüngliche Fehlermeldung des Kompilers und könntest du diese bitte posten?
-
Konrad schrieb:
evilissimo schrieb:
Versuche es mal einfach so:
struct MyGreater { bool operator()( myClass *a, myClass *b ) { return *a < *b; } }; std::sort( vec.begin(), vec.end(), MyGreater() );Edit: btw wundert es mich das es nicht geht. Eigentlich sollte deine Funktion zum Vergleich genauso funktionieren.
Hallo,
sollte man da nicht von std::binary_function ableiten bzw. first_argument_type etc.. dabeipacken?
Ich denke nicht dass es notwendig ist einen Funktor von std::binary_function abzuleiten. Sollte ich mich irren lasse ich mich gerne mit Quellenangabe eines besseren belehren

BR
evilissimo
-
Ich hab mal nachgeguckt und es ist nur nötig, wenn man den Functor mit nem Function adapter benutzen möchte.
Quellenangabe wäre "The C++ Standard Library - A tutorial and reference", S.310.