2009-05-20 11 views
5

Ho un C++ std :: vector indicati come:Come ordinare un oggetto std :: vector dal suo valore float

std::vector<GameObject*> vectorToSort; 

Ogni oggetto vectorToSort contiene un parametro galleggiante che viene restituito chiamando "DistanceFromCamera () ":

vectorToSort.at(position)->DistanceFromCamera(); 

desidero ordinare il vettore da questo parametro galleggiante però std :: sort non sembra essere in grado di fare questo. Come posso ottenere questo tipo?

+1

Credo che si significa che GameObject ha un metodo chiamato DistanceFromCamera() e non std :: vector ralphtheninja

+0

Magnus, sicuramente, ho corretto che per lui: -P –

+0

Sì, sei corretto, ho appena aggiornato il codice con quello che sto attualmente utilizzando. Grazie per la pronta risposta Evan, lo sto testando ora. Ti risponderò al più presto –

risposta

19

si desidera utilizzare un predicato come questo:

struct VectorSortP { 
    bool operator()(const GameObject *a, const GameObject *b) const { 
     return a->DistanceFromCamera() < b->DistanceFromCamera(); 
    } 
}; 

std::sort(vectorToSort.begin(), vectorToSort.end(), VectorSortP()); 
+0

Ah, mi hai battuto per questo ... –

+0

+1 E anche io :) :) – ralphtheninja

+0

Mi viene un errore: C2804: l'operatore "binario" ha troppi parametri (riferendosi a la linea che inizia con: "bool operatore <(const"). –

Problemi correlati