5

next_permutation を同じサイズの 2 つの異なる配列で同じスワップ セットを実行する簡単な方法はありますa[]={1,2,3,4,5}b[]={12,23,21,2,3} 。位置。

4

2 に答える 2

4

補助インデックスセットを作成できます。

int a[] = { 1, 2, 3, 4, 5 };
int b[] = { 12, 23, 21, 2, 3 };

std::size_t indices[] = { 0, 1, 2, 3, 4 };

次に、で順列を実行してからindices、とを使用a[indices[i]]b[indices[i]]ます。

于 2012-05-09T20:14:31.283 に答える
1

std::next_permutation は状態を保持しないことに注意してください (stl アルゴリズムの概念に反します)。では、どのようにして次の順列を生成するのでしょうか? 要素の順序でそれを行います。そのため、比較演算子を受け入れるバージョンがあります

サイズ N のソート済み配列を指定すると、next_permutation を N と呼ぶことができます! 回。そうしないと、アルゴリズムが false を返すまでの順列が少なくなります。

あなたの質問に答えるために、上記のように「補助インデックスセット」に関して配列が同じ順序である場合、同じ要素が交換されます。

例:

int a[] = { 1, 2, 4, 3 };
int b[] = { 11, 12, 14, 13 };

sort は同じインデックス順序を生成するため、これらは同じように並べ替えられます。

于 2012-05-10T05:22:38.830 に答える