使用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 的回答在技术上是正确的,但我们可以做得更好。
- 通常最好尽可能使用标准算法
- 设置参数
const
以便它也可以与容器一起使用到 const 对象
- 无需在 lambda 中使用低效的“通过复制捕获所有内容”
std::sort(qList.begin(), qList.end(), [](const Players& p1, const Players& p2) {
return (p1.playerRank < p2.playerRank);
});
我有一个 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 的回答在技术上是正确的,但我们可以做得更好。
- 通常最好尽可能使用标准算法
- 设置参数
const
以便它也可以与容器一起使用到 const 对象 - 无需在 lambda 中使用低效的“通过复制捕获所有内容”
std::sort(qList.begin(), qList.end(), [](const Players& p1, const Players& p2) {
return (p1.playerRank < p2.playerRank);
});