gpt4 book ai didi

c++ - 对 std::vector 进行排序但忽略某个数字

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:57 24 4
gpt4 key购买 nike

我有一个 std::vector<int>大小为 10,每个条目最初为 -1。该 vector 表示我的游戏的排行榜(高分),-1 仅表示该条目没有得分。

std::vector<int> myVector;
myVector.resize(10, -1);

游戏开始后,我想从文件中加载最高分。我加载每一行(最多 10 行),将找到的值转换为 intstd::stoi ,如果数字 >0,我将其替换为当前位置 vector 中的 -1。

所有这些都有效。现在解决问题:

由于文件中的值不一定排序,我想对 myVector 进行排序在我加载所有条目之后。我用

std::sort(myVector.begin(), myVector.end());

这按升序排序(在我的游戏中分数越低越好)。

问题在于,由于 vector 最初填充的是 -1,并且不一定有 10 个条目保存在高分文件中,因此除了玩家的分数之外, vector 可能还包含一些 -1。

这意味着当用上面的代码对 vector 进行排序时,所有的-1 都会出现在玩家得分之前。

我的问题是: 如何对 vector 进行排序(按升序),但所有带 -1 的条目都将放在末尾(因为它们不代表真实分数)?

最佳答案

结合分区和排序:

std::sort(v.begin(),
std::partition(v.begin(), v.end(), [](int n){ return n != -1; }));

如果您存储从 partition 返回的迭代器,您已经对非平凡值的范围有了完整的描述,因此您以后不需要再寻找 -1。

关于c++ - 对 std::vector<int> 进行排序但忽略某个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com