作者:圈儿丫头1986 | 来源:互联网 | 2022-11-24 18:30
我必须对结构的矢量进行排序.假设结构有两个成员:
Struct game
{
string name;
int rating;
};
所以我创建了一个std::vector
游戏,并通过评级对它们进行简单排序.
std::sort(games.begin(),games.end(), [](game& info1, game& info2)
{
return info1.rating > info2.rating;
});
到目前为止一切都还好.问题是如果所有游戏的评级值都为0,则会混合.简单地说,我只需要对等级大于零的元素进行排序.我们举个例子:
所有游戏都按照字母顺序和等级0按名称推入向量,当触发排序时,字母顺序被违反.
排序前的示例:
"A_Game"
,"B_Game"
,"C_Game"
,"E_Game"
,"G_Game"
,等.(继续与所有下一字母)
排序后(所有游戏都评级为0):
"G_Game"
,"S_Game"
,"P_Game"
,"M_Game"
,"L_Game"
,"I_Game"
,等.
我只需要对这些评级大于0的游戏进行排序.提前感谢.
1> Vittorio Rom..:
您可以使用它std::stable_sort
来防止移动不受排序条件影响的元素.
std::stable_sort(games.begin(),games.end(), [](game& info1, game& info2)
{
return info1.rating > info2.rating;
});
2> 眠りネロク..:
std::sort()
是不一个稳定的排序算法,即,具有等价密钥元件可以不被排序之后保持它们之间的原始次序.
您可以使用std::stable_sort()
而不是std::sort()
:
std::stable_sort(games.begin(),games.end(), [](game& info1, game& info2)
{
return info1.rating > info2.rating;
});
正如其名称所示,std::stable_sort()
实现了稳定的排序算法.