【发布时间】:2017-12-10 18:07:46
【问题描述】:
我有一个包含正整数和 -1 的向量。我的问题是我想对向量进行排序,但不要通过仅使用 std::sort 来触摸 -1 elements(我知道解决它的其他方法)。
例如:
输入:[-1, 150, 190, 170, -1, -1, 160, 180]
输出:[-1, 150, 160, 170, -1, -1, 180, 190]
这是我解决它的想法,但没有奏效:
sort(myVector.begin(), myVector.end(), [&](const int& a,const int& b)->bool {
if (a == -1 || b == -1)
return &a < &b;
return a < b;
});
我的输出是:[-1, 150, 170, 190, -1, -1, 160, 180]
输出应该是:[-1, 150, 160, 170, -1, -1, 180, 190]
有没有办法使用std::sort 来解决它?
【问题讨论】:
-
我不认为这是直接可能的。
std::sort函数在一个范围内运行,没有办法暂时删除元素并稍后将它们添加回相同的位置(当然你可以分多个步骤执行此操作,但我相信这不是你要问的)。我也不明白您所说的“自定义”std::sort是什么意思。std::sort的工作方式也是实现定义的 AFAIK,因此您无法对排序如何发生做出任何假设。 -
@Yashas 对不起我的英语,你是对的,我编辑了我的问题
-
将
-1s 的位置提取到一个向量中,删除所有-1s,排序并返回。