Сортировка векторов в c ++ как c и des c порядок - PullRequest
0 голосов
/ 26 мая 2020

У меня есть класс Player, и мне нужно создать stati c method void Player::sortPlayers( vector<Player> &players, bool (*c)(const Player&, const Player&)), и этот метод должен содержать только одну строку, в которой вы вызываете функцию sort, с помощью которой вы можете упорядочивать игроков по возрастанию или убыванию, и чем в основном создать две функции bool ascending(const Player &p1, const Player&p2) и bool descending(const Player &p1, const Player &p). Я сделал это в классе:

void Player::sortPlayers(vector<Player> &players, bool (*c)(const Player&, const Player&)) {
sort(players.begin(),players.end());
}

Как мне начать в основном? Я пробовал это, но это не сработает (для c):


bool ascending(const Player &p1, const Player &p2) {
    Player::sortPlayers(p1,p2);
}

сообщение об ошибке: Non-const lvalue reference to type 'vector<Player>' cannot bind to a value of unrelated type 'const Player'

1 Ответ

3 голосов
/ 26 мая 2020

std::sort принимает три аргумента, а третий - компаратор. Вы можете определить свой компаратор, чтобы std::sort соответствовал вашим потребностям, как показано ниже

void Player::sortPlayers(vector<Player> &players, bool (*c)(const Player&, const Player&)) {//define sortPlayers function
std::sort(players.begin(),players.end(), c);
}


bool ascending(const Player &p1, const Player &p2) {//define ascending function here
    return p1.age < p2.age;
}

bool descending(const Player &p1, const Player &p2) {//define descending function here
    return p1.age > p2.age;
}

int main()
{
    std::vector<Player> players = ....;//initialize the vector of players here
    Players::sortPlayers(players, ascending);//sort them in ascending order
    Players::sortPlayers(players, descending);//sort them in descending order

}
...