std::sort(begin, end)
への呼び出しが実際に範囲を変更したかどうかを判断する最もエレガントな方法は何ですか?ここでstd :: sort(begin、end)が範囲を変更したかどうかを調べる
は私の2つのアイデアです:
(a)のチェックであればすでにソートO(n)は:
if (already_sorted(begin, end)) { return false; }
std::sort(begin, end);
return true;
(b)は、比較のトラックの変化(これは安全なのですか?):
bool modified = false;
std::sort(begin, end, [&modified](T a, T b){ modified |= a<b; return a<b; });
return modified;
もっと良い方法がありますか?
私は、(b)は安全だとは思わない:アルゴリズムは 'comp(a、b)'の代わりに 'comp(b、a)'をテストし、結果が '偽です。 –
私はより良い質問は、範囲が既にソートされているかどうかを知る必要がある理由だと思います。ソートされた範囲を「安全な」方法で処理するソートアルゴリズムを選択する必要があるでしょう。範囲はソートされていますか? –
@ Jeff:私のアプリケーションにはソートされた範囲を生成する可能性のあるプロセスがあります。そうでない場合は、いくつかのステップを繰り返す必要があります。 – Inverse