比較関数の自然な例

ソートで使用する比較関数のうまい例がみつからない。

列 { Xn } をソートするのに、関数 f でマップした f(Xn) の大小関係で比較することは良くあり、そのときの比較関数は [ ] ( auto a, auto b) { return f(a) < f(b); } という内容のものになるだろう。

VBAHaskellで実装している関数は配列を直接ソートするのではなくて、ソートインデックスを出力するものだ。それならば列 { f(Xn) } を作って、デフォルトの大小関係でソートすればいいことになるし、関数 f の呼び出し回数を考慮するとその方が速度は上かもしれない。このままでは比較関数を受け取る sortIndex_pred 関数の存在意義が説得力のないものになってしまう。

あらかじめ { f(Xn) } を作っておくのが難しい(またはすごく面倒な)例はないだろうか?あれば比較関数をとる sortIndex_pred の意義をより有効に表現できるのだ。

 

VBAHaskellの紹介 その8 (ソート関連) - mmYYmmdd’s blog