2009-05-20 29 views
5

Mam C++ std :: vector oznaczona jako:Jak sortować obiektu std :: vector przez wartości pływaka

std::vector<GameObject*> vectorToSort; 

Każdy obiekt w vectorToSort zawiera parametr pływaka, który jest zwracany przez wywołanie „DistanceFromCamera ():

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

Chciałbym posortować wektor za pomocą tego parametru float, ale std :: sort nie wydaje się być w stanie to zrobić. Jak mogę osiągnąć ten rodzaj?

+1

Chyba myśli, że GameObject ma metodę zwaną DistanceFromCamera() i nie std :: vector ralphtheninja

+0

Magnus, zdecydowanie, poprawiłem, że dla niego: -P –

+0

Tak, masz rację, właśnie zaktualizowałem kod tym, z czego aktualnie korzystam. Dziękuję za szybką odpowiedź Evan, testuję to teraz. Wrócę do ciebie jak najszybciej –

Odpowiedz

19

chcesz użyć predykatu takiego:

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, pokonałeś mnie ... –

+0

+1 I ja też hehe :) – ralphtheninja

+0

Otrzymuję błąd: C2804: binarny "operator <" ma zbyt wiele parametrów (odnosząc się do linia zaczynająca się od: "operator bool <(const"). –

Powiązane problemy