对std :: vector <int>进行排序,但忽略某个数字

A. *_* D. 0 c++ sorting vector

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

std::vector<int> myVector;
myVector.resize(10, -1);
Run Code Online (Sandbox Code Playgroud)

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

这一切都有效.现在来问题:

由于文件中的值不一定排序,我想myVector在加载所有条目后进行排序.我这样做

std::sort(myVector.begin(), myVector.end());
Run Code Online (Sandbox Code Playgroud)

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

问题是,由于向量最初用-1填充,并且高分文件中不一定保存10个条目,因此除了玩家的分数之外,向量可能包含几个-1.

这意味着当使用上面的代码对矢量进行排序时,所有-1将出现在玩家的分数之前.

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

Ker*_* SB 9

结合分区和排序:

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

如果存储从中返回的迭代器partition,则已经具有非平凡值范围的完整描述,因此您不需要在以后查找-1s.