Sortowanie wektorów

0

Mam taką klasę

 class CHighScore{
private:
    string name;
    int score;
    friend bool _sort(const CHighScore &x, const CHighScore &y);
public:
    void show();
    void save(CHighScore object);
    CHighScore(){/*nothing to do*/}
    CHighScore(string _name, int _score):name(_name),score(_score){}
};

i funkcję POZA klasa

 bool _sort(const CHighScore &x, const CHighScore &y){
        return x.score>y.score;
    }

żeby posortować elementy

 sort(scores.begin(),scores.end(),_sort);

scores to nazwa mojego wektora.
Teraz pytanie.
Jak zrobić aby sortowanie działało ale funckja _sort była by WEWNĄTRZ klasy CHighScore?

1

Może być statyczna.
EDIT: np.

    struct Costam
    {
        int ilosc;
        Costam()
            :ilosc(0){}
        Costam(const int& arg)
            :ilosc(arg){}
        static bool CostamComparer(const Costam& lhs, const Costam& rhs)
        {
            return lhs.ilosc < rhs.ilosc;
        }
    };

    //Gdzieś tam wywołanie:
    std::vector<Costam> costams;
    costams.push_back(Costam(10));
    costams.push_back(Costam(20));
    std::sort(costams.begin(), costams.end(), Costam::CostamComparer);
1

Możesz przeciążyć operator< dla swojej klasy:

class CHighScore {
private:
    string name;
    int score;
public:
    void show();
    void save(CHighScore object);
    CHighScore(){/*nothing to do*/}
    CHighScore(string _name, int _score):name(_name),score(_score){}
    bool operator<(const CHighScore& rhs) {
        return score < rhs.score;
    }
};

Wtedy możesz wywoływać normalnie std::sort() bez podawania komparatora:

std::vector<CHighScore> v;
// ...
std::sort(v.begin(), v.end());

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0