2009-05-20 7 views
5

J'ai un C++ std :: vecteur dénoté comme:Comment trier un std objet :: vecteur par sa valeur flottante

std::vector<GameObject*> vectorToSort; 

Chaque objet vectorToSort contient un paramètre de flotteur qui est retourné en appelant « DistanceFromCamera () ":

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

Je souhaite trier le vecteur par ce paramètre float mais std :: ne règle semble pas être en mesure de le faire. Comment puis-je atteindre ce genre?

+1

Je suppose que vous voulez dire que gameobject a une méthode appelée DistanceFromCamera() et non std :: vecteur ralphtheninja

+0

Magnus, sans aucun doute, je corrigé que pour lui: -P –

+0

Oui, vous avez raison, je viens de mettre à jour le code avec ce que j'utilise actuellement. Merci pour la réponse rapide Evan, je la teste maintenant. Je vais revenir à vous dès que possible –

Répondre

19

vous voulez utiliser un prédicat comme ceci:

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

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

Ahh, vous me battez à lui ... –

+0

+1 Et moi aussi hehe :) – ralphtheninja

+0

Je reçois une erreur: C2804: binaire 'opérateur <' a trop de paramètres (se référant à la ligne commençant par: "opérateur bool <(const"). –