c++ - vector 排序算法,只对大于 0 的元素进行排序

标签 c++ algorithm sorting vector

我必须对结构 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/

相关文章:

c - 如何忽略/删除前导零?

c++ - 对象的动态转换或第二个容器?

algorithm - 如何在恒定时间内从稀疏表中删除行/列?

c++ - 是否可以编写一个可变参数函数,将其参数列表发送到另一个可变参数函数?

在 map 上放置对象标签的算法

c++ - 迭代二维网格子集的最佳方法

arrays - 在shell脚本中排序

linux - 如何使用 linux 命令排序,同时将 3 行视为 1 个 block 并根据每个 block 的第一行进行排序

C++ 线程 : Attempt to use a deleted function

c++ - 读取 GLSL 文件时获取垃圾字符