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