gpt4 book ai didi

c++ - 对对 vector 的特定位置进行排序

转载 作者:行者123 更新时间:2023-12-02 10:27:07 32 4
gpt4 key购买 nike

vector 的每个元素都是一对整数,其中第一个整数表示值,第二个整数表示元素是被锁定还是未锁定(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},{-2,0},{-6,0},{-8,1},{4,1},{7,1}}
在这里,我尝试对仅未锁定的位置实施排序,但发现锁定的位置也会更改其位置。
我的预期输出是
{{-8,1},{4,0},{1,0},{-2,0},{4,1},{7,1},{-6,0}}
我的问题是,为什么我要获得该输出?以及如何修改sort函数以获得我的预期输出?

最佳答案

如果仅希望对不构成连续范围的子集进行排序,则必须首先提取该子集。
最简单的方法是仅将一组解锁选项复制到一个新容器中,对其进行排序,然后使用一对迭代器在原始容器和已排序的容器上进行迭代,以找到进行排序的“未锁定”点现在可以写入元素。

关于c++ - 对对 vector 的特定位置进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63895436/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com