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;
    	}
    };
    

    😮 😕


  • Mod

    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 🕶


Anmelden zum Antworten