Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c++]predicato

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]predicato

    ciao.
    Ho utilizzato un function object per fare il sort di un array di Centity in base a 3 proprietà della classe stessa:
    codice:
    bool operator()(CEntity* pEnt1, CEntity* pEnt2) 
    	{
    	//ritorna 1 se la sequenza di controllo trova minore, con priorità first, second, third
    	   
    		//CVector v1, v2;
    		//carico i valori delle coordinate per tipo elemento dalle due entità pEnt1 e pEnt2
    		//che mi vengono passate dal sort e dal container
    		//le inserisco nei due vettori v1 e v2 
    		//SetVars(&v1, &v2, pEnt1, pEnt2);
    
    		double dFirst1, dSecond1, dFirst2, dSecond2, dThird1, dThird2;
    		
    		dFirst1 = pEnt1->GetPointRif().GetValue(m_nFirst);
    		dFirst2 = pEnt2->GetPointRif().GetValue(m_nFirst);
    		dSecond1 = pEnt1->GetPointRif().GetValue(m_nSecond);
    		dSecond2 = pEnt2->GetPointRif().GetValue(m_nSecond);
    		dThird1 = pEnt1->GetPointRif().GetValue(m_nThird);
    		dThird2 = pEnt2->GetPointRif().GetValue(m_nThird);
    		
    		if( dFirst1 < dFirst2)
    			return true;
    		else if (dFirst1 > dFirst2)
    			return false;
    		else if (dSecond1 < dSecond2)
    			return true;
    		else if (dSecond1 > dSecond2)
    			return false;	
    		
    		if (dThird1 < dThird2)
    			return true;
    		if (dThird1 > dThird2)
    			return false;	
    		
    		return false;//cambiando questo ho risultati diversi!!!
    
    	}
    };
    Il problema è che ho risultati diversi se cambio l'ultimo return suppongo sia per causato dal fatto che non considero i dati uguali ==.
    come si fa a gestire questi casi?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Scusa, ma se a < b è vero, è vero anche b>= a.
    Quindi il predicato lo puoi scrivere così:
    codice:
    if( dFirst1 < dFirst2) return true;
    
    if (dSecond1 < dSecond2) return true;
    
    if (dThird1 < dThird2) return true;
    
    return false;
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.