问题描述
向量的每个元素都是一对整数,其中第一个整数表示值,第二个整数表示元素是被锁定还是未锁定(0表示该位置的元素已解锁,1表示该元素在该位置被锁定)。
我们可以在解锁位置取值,以任何顺序重新排列它们,然后将它们放回解锁位置。我们不允许删除任何值,添加新值或在锁定位置重新排列值。我们可以按原先的顺序保留这些值。
我想按降序对解锁位置进行排序。可以用其他方法完成,但是我尝试使用以下代码逻辑。
sort(array.begin(),array.end(),[](auto a,auto b){ if(a.second==0 && b.second==0)return a.first>b.first; });
对于像这样的输入, {{-8,1},{4,0},{-2,0},{-6,0},{4,1},{7,1},{1,0}}
我得到了输出, {{4,0},{1,0},{-8,1}}
在这里,我尝试对仅未锁定的位置实施排序,但发现锁定的位置也会改变其位置。
我的预期输出是 {{-8,1},{-6,0}}
我的问题是,为什么我要获得该输出?以及如何修改sort函数以获得我期望的输出?
解决方法
如果只希望对不构成连续范围的子集进行排序,则必须先提取该子集。
最简单的方法是仅将一组未锁定的选项复制到一个新容器中,对其进行排序,然后使用一对迭代器在原始容器和已排序的容器上进行迭代,以找到“未锁定”的位置现在可以在其中写入排序后的元素了。