如何对std :: vector进行排序,但不使用std :: sort更改特定元素?

Lon*_* Le 5 c++ sorting stl

我有一个包含正整数和-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

Nic*_*las 3

std::sort不可以这样做。它按照严格的弱顺序对一系列元素进行排序。您定义的顺序不是strict-weak。并且无法定义严格弱的排序,以便某些值保留在当前位置。因此,如果您尝试使用sort这样的顺序,您会得到未定义的行为。

所以你必须编写自己的排序函数。或者您可以删除 -1(记录它们的位置),对列表进行排序,然后重新插入它们。