ソート後の移動先インデックスを求める

配列をソートしたときの移動先インデックスを知りたい場合があります。
D 言語だと topNIndex 関数で知ることが出来ます。

import std;

void main() {
    auto a = [99, 1, 100, 2, 150];
    auto id = new int[a.length];
    a.topNIndex(id, Yes.sortOutput);
    foreach (i; 0..a.length) {
        writefln("a[%d] = %d", id[i], a[id[i]]);
    }
}

実行結果です。

a[1] = 1
a[3] = 2
a[0] = 99
a[2] = 100
a[4] = 150