Operator<
-
class TrInt { public: TrInt( int a_, int b_, int c_ ): a( a_ ), b(b_), c(c_) {} int a; int b; int c; bool operator<( const AInt& rhs ) const { if( a == rhs.a ) { if( b == rhs.b ) { return c < rhs.c; } return b < rhs.b; } return a < rhs.a; }oder
class TrInt { public: TrInt( int a_, int b_, int c_ ): a( a_ ), b(b_), c(c_) {} int a; int b; int c; bool operator<( const TrInt& rhs ) const { if( a < rhs.a ) { return true; } if( b < rhs.b ) { return true; } if( c < rhs.c ) { return true; } return false; } };

-
die beiden varianten sind nicht äquivalent. für die 2.variante folgt im übrigen nicht aus a < b, dass b < a falsch ist.
die erste variante führt immer mindestens 2 vergleiche aus, sinnvoll könnte hier die umkehrung der reihenfolge sein:bool operator<( const Trnt& rhs ) const { return a < rhs.a || a == rhs.a && ( b < rhs.b || b == rhs.b && c < rhs.c ); }
-

stimmt
-
Boah da spar ich mindestens 3 Taktzyklen
