对对向量的特定位置进行排序

问题描述

向量的每个元素都是一对整数,其中第一个整数表示值,第二个整数表示元素是被锁定还是未锁定(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函数以获得我期望的输出?

解决方法

如果只希望对不构成连续范围的子集进行排序,则必须先提取该子集。

最简单的方法是仅将一组未锁定的选项复制到一个新容器中,对其进行排序,然后使用一对迭代器在原始容器和已排序的容器上进行迭代,以找到“未锁定”的位置现在可以在其中写入排序后的元素了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...