【问题标题】:Sorting vectors in c++ asc and desc order按 c++ asc 和 desc 顺序对向量进行排序
【发布时间】:2025-12-14 23:40:01
【问题描述】:

我有 Player 类,我必须创建静态方法 void Player::sortPlayers( vector<Player> &players, bool (*c)(const Player&, const Player&)) 并且该方法应该只包含一行,您可以在其中调用函数 sort ,您可以使用该函数将玩家按年龄升序或降序排列,而不是在 main创建两个函数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());
}

如何从 main 开始?我试过了,但它不起作用(对于 asc):


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

错误信息: Non-const lvalue reference to type 'vector&lt;Player&gt;' cannot bind to a value of unrelated type 'const Player'

【问题讨论】:

    标签: c++ sorting c++11 vector stl


    【解决方案1】:

    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
    
    }
    

    【讨论】:

    • 当我尝试调用 Players::sortPlayers(players, ascending);或 Players::sortPlayers(players, descending); ,它不显示错误但不打印任何内容
    • @amy1122 离开了。因为它对向量元素进行排序。它不显示它们。