W
xxLKMxx schrieb:
An dieser Stelle nutze ich "myfunction" und "myclass" ja noch nicht. Die Zeile müsste ja alleine also funktionieren. Ich vermute, dass liegt daran, dass ein Objekt nicht mit einem anderen Objekt verglichen werden kann (siehe Fehlermeldung) ...
genau so ist es. Man muss dem sort noch mitteilen, wie er vergleichen soll. Ohne 3.Parameter würde sort den <-operator nutzen, den die Klasse Auto aber nicht besitzt. Eine andere Möglichkeit besteht darin, einen Funktor als Lambda-Ausdruck anzugeben. Das geht so:
#include <algorithm> // sort
#include <vector>
#include <iostream>
class Auto
{
public:
Auto( int ps, int Km, int anzTueren )
: PS( ps ), km( Km ), Tueren( anzTueren )
{}
int PS;
int km;
int Tueren;
};
std::ostream& operator<<( std::ostream& out, const Auto& a )
{
return out << "Auto " << a.PS << "PS " << a.km << "km " << a.Tueren << "Türen";
}
int main()
{
using namespace std;
vector< Auto > Fuhrpark;
Fuhrpark.push_back( Auto( 88, 100000, 5 ) );
Fuhrpark.push_back( Auto( 55, 120000, 5 ) );
Fuhrpark.push_back( Auto( 112, 10000, 3 ) );
cout << ".. nach PS:" << endl;
sort( begin(Fuhrpark), end(Fuhrpark), []( const Auto& a, const Auto& b ) { return a.PS < b.PS; } ); // sortiere nach PS aufsteigend
for( auto pkw: Fuhrpark )
cout << pkw << endl;
cout << "\n.. nach Kilometer-Leistung:" << endl;
sort( begin(Fuhrpark), end(Fuhrpark), []( const Auto& a, const Auto& b ) { return a.km < b.km; } ); // sortiere nach km aufsteigend
for( auto pkw: Fuhrpark )
cout << pkw << endl;
return 0;
}