質問があります。例えば、最大公約数に基づく並べ替え順序
bool cmp(int a, int b)
{
return __gcd(a, b) > 1;
}
と:私はこのコンパレータを書く
私はこれらの数字がある場合:
2 5 6 7 8 12 15 19 20
私のコードの出力:
20 15 12 8 6 2 5 7 19
それは大丈夫ですが...
ただし、例:
1 2 3 4 5 6 7 8 9
私のコードを出力
1 2 3 4 5 6 7 8 9
私はこれをどのように行うことができますか?
このシーケンスは次のようなものでなければなりません。結果は定義されていませんので、あなたのコンパレータは、strict weak orderingを確立していない
9 6 3 (...)
おそらくあなたは 'std :: so rt'?これは動作しません。 'std :: sort'は[* strict weak ordering *](https://www.sgi.com/tech/stl/StrictWeakOrdering.html)を必要とします。これは基本的に通常の数字のようにソートしなければならないことを意味します。例えば。 '3 <4'なので、'!(4 <3) 'です。しかし、 'gcd'は* commutative *' gcd(a、b)== gcd(b、a) 'です - 同じように動作します。ソートの感覚。とにかく、あなたはどんな順序で達成しようとしているのかよく分かりません。 – BoBTFish
どうすればソートできますか? – JanKo
正直言って、あなたは何を達成しようとしているのか分かりません。私は、ある要素が他の要素よりも "大きく"なることが理にかなっていることは分かりません。これはプログラミングのバグではなく、数学のバグです。あなたが本当に欲しいものを考えてみてください。それは実際に理にかなっていますか? – BoBTFish