Sort

行列/ベクトルをその場で並べ替えます

void vector::Sort(
func_name compare_func=NULL, // 比較関数
T         context           // カスタム並び替え関数のパラメータ
  );
 
void matrix::Sort(
func_name compare_func=NULL   // 比較関数
T         context           // カスタム並び替え関数のパラメータ
  );
 
void matrix::Sort(
  const int  axis,              // 並べ替えの軸
func_name compare_func=NULL   // 比較関数
T         context           // カスタム並び替え関数のパラメータ
  );

パラメータ

axis

[in] 並び替えの軸(0は水平方向、1は垂直方向)

func_name

[in] 比較関数。ENUM_SORT_MODE列挙の値の1つまたは独自の比較関数を指定できます。関数が指定されていない場合、昇順での並び替えが使用されます。
 
カスタム比較関数には次の2種類があります。

  • int comparator(T x1,T x2)
  • int comparator(T x1,T x2,TContext context)

ここで、Tは行列/ベクトルの型であり、TContexは、Sortメソッドに追加パラメータとして渡されるcontext変数の型です。

context

[in] カスタム並べ替え関数に渡すことができる追加のオプションパラメータ

戻り値

なし。並び替えはその場で実行されます。つまり、並び替えメソッドが呼び出された行列/ベクトルのデータに適用されます。

//+------------------------------------------------------------------+
//| 並び替え関数                                                        |
//+------------------------------------------------------------------+
int MyDoubleComparator(double x1,double x2,int sort_mode=0)
 {
  int res=x1<x2 ? -1 : (x1>x2 ? 1 : 0);
  return(sort_mode==0 ? res : -res);
 }
//+------------------------------------------------------------------+
//| スクリプトを開始する関数                                                |
//+------------------------------------------------------------------+
void OnStart()
 {
  //--- ベクトルに書き入れる
  vector v(100);
  //--- 昇順で並べ替える
  v.Sort(MyDoubleComparator);   // an additional parameter with the default value '0' is used here
  Print(v);
  // 降順で並べ替える
  v.Sort(MyDoubleComparator,1); // ここでは、追加のパラメータ「1」がユーザーによって明示的に指定されている
  Print(v);
 }