假设我有一个整数向量:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
然后我按降序对其进行排序:
sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];})
for (int i=0; i<15; i++) printf("%i\n", indices[i]);
这将产生以下结果:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
现在,我想将数字3、4、5和6移到末尾,并保持它们的降序(最好不必sort
第二次使用)。即,这就是我想要的:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
我应该如何修改的比较功能std::sort
以实现这一目标?
对于简单的降序排序,可以使用
—
sweenish
std::greater
from <functional>
代替lambda。关于您的问题,编写一个更详细的比较器以确保您的值比较所需的方式可能是最简单的方法。
@ acraig5075,按降序应为
—
ks1322
return first > second
。
@ acraig5075我觉得我缺少了什么,还是人们不知道上升和下降之间的区别?
—
sweenish
也许您正在寻找std :: rotate吗?
—
超级
return indices[first] > indices[second]
不是return first < second;
吗