我必须对结构 vector 进行排序。假设该结构有两个成员:
Struct game
{
string name;
int rating;
};
所以我创建了一个 std::vector<game>
游戏,并按评分对它们进行简单排序。
std::sort(games.begin(),games.end(), [](game& info1, game& info2)
{
return info1.rating > info2.rating;
});
目前一切正常。 问题是如果所有游戏的评级值为 0,它们就会混合。简而言之,我必须只对评分大于零的元素进行排序。让我们举个例子:
所有游戏都按字母顺序和等级 0 的名称推送到 vector 中,当触发排序时,字母顺序会被破坏。
排序前的例子:
"A_Game"
, "B_Game"
, "C_Game"
, "E_Game"
, "G_Game"
等(继续接下来的所有字母)
排序后(所有游戏的评分均为 0):
"G_Game"
, "S_Game"
, "P_Game"
, "M_Game"
, "L_Game"
, "I_Game"
等
我只需要对评分大于 0 的游戏进行排序。 提前致谢。
最佳答案
您可以使用 std::stable_sort
以防止移动不受排序标准影响的元素。
std::stable_sort(games.begin(),games.end(), [](game& info1, game& info2)
{
return info1.rating > info2.rating;
});
关于c++ - vector 排序算法,只对大于 0 的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814928/