我有一个包含正整数和-1的向量.我的问题是我想对矢量进行排序,但不要-1 elements只使用std::sort(我知道其他方法来解决它).
例如:
输入:[-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;
});
Run Code Online (Sandbox Code Playgroud)
我的输出是:[-1,150,170,190,-1,-1,160,180]
输出应为:[-1,150,160,170,-1,-1,180,190]
有没有想法通过使用来解决它std::sort?
std::sort不可以这样做。它按照严格的弱顺序对一系列元素进行排序。您定义的顺序不是strict-weak。并且无法定义严格弱的排序,以便某些值保留在当前位置。因此,如果您尝试使用sort这样的顺序,您会得到未定义的行为。
所以你必须编写自己的排序函数。或者您可以删除 -1(记录它们的位置),对列表进行排序,然后重新插入它们。
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |