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的条目都将放在最后(因为它们不代表真实分数)?
结合分区和排序:
std::sort(v.begin(),
std::partition(v.begin(), v.end(), [](int n){ return n != -1; }));
Run Code Online (Sandbox Code Playgroud)
如果存储从中返回的迭代器partition,则已经具有非平凡值范围的完整描述,因此您不需要在以后查找-1s.
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |