整数のベクトルがあるとしましょう:
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
2回目に使用する必要はありません)。つまり、ここに私が欲しいものがあります:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
それstd::sort
を実現するには、の比較関数をどのように変更すればよいですか?
単純な降順ソートの場合、
—
スウィーニッシュ
std::greater
from <functional>
をラムダの代わりに使用できます。あなたの質問に関しては、あなたの値があなたが望む方法で比較することを保証するより詳細なコンパレータを書くことはそれを行う最も簡単な方法かもしれません。
@ acraig5075、降順である必要があります
—
ks1322
return first > second
。
@ acraig5075何かが足りないような気がしますか、それとも昇順と降順の違いが分からないのですか?
—
13:22にスウィーニッシュ
多分あなたはstd :: rotateを探していますか?
—
スーパー
return indices[first] > indices[second]
どういう意味return first < second;
ですか?