使用Cpp在Qt中根据class 属性对QList进行排序

Sorting QList based on class property in Qt using Cpp

我有一个 QList qList,我想根据玩家 class 中的 属性“playerRank”对其进行排序。 玩家class如下图

class Players
{
public:
    Players();
    int playerId;
    QString playerName;
    int playerRank;

    void setPlayerId(int id);
    void setPlayerName(QString name);
    void setPlayerRank(int rank);
};


#include "players.h"

Players::Players()
{

}

void Players::setPlayerId(int id)
{
    playerId = id;
}

void Players::setPlayerName(QString name)
{
    playerName = name;
}

void Players::setPlayerRank(int rank)
{
    playerRank = rank;
}

我该怎么做?

你可以 qSort 并传递一个 lambda 作为比较器。

 qSort(qList.begin(), qList.end(), 
     [=] (Players& p1, Players& p2)->bool  
     {  
        return (p1.playerRank < p2.playerRank);  
     }
 );

@Ishra 的回答在技术上是正确的,但我们可以做得更好。

  1. 通常最好尽可能使用标准算法
  2. 设置参数 const 以便它也可以与容器一起使用到 const 对象
  3. 无需在 lambda 中使用低效的“通过复制捕获所有内容”
std::sort(qList.begin(), qList.end(), [](const Players& p1, const Players& p2) {  
    return (p1.playerRank < p2.playerRank);
});