std::vector<double>
と定義されるn
の正方行列A
を仮定します。ベクトルとして定義された行列をソートする<double>
double a_ij = A[i*n + j];
私は最初の列に対して昇順に行列の行をソートする必要がある:マトリックスの
std::vector<double> A(n*n);
要素は、通常の方法でアクセスされています。
qsort関数は、配列と関数ポインタを使ってqsort関数を実行することができますが、ベクトルとstd::sort
でこれを実現する方法を探したいと思います。
また、性能上の理由から私の行列をベクトルのベクトルとして定義したくないことに注意してください。
編集:私はqsort関数に渡された
機能:
static int comparisonFunction(const void* firstRow, const void* secondRow)
{
if (((double *)firstRow)[0] < ((double *)secondRow)[0]) return -1;
else if (((double *)secondRow)[0] < ((double *)firstRow)[0]) return 1;
return 0;
}
そしてコール:
std::qsort(matrixArray, nbRows, sizeof(double)*nbRows, comparisonFunction);
"パフォーマンスの理由"について詳しく説明できますか? – SingerOfTheFall
ソートされた行列で重い計算を実行する必要があるので、メモリの連続性が望ましいです。 – Dooggy
'begin'と' end'が行間を反復できるようにラッパーが必要です – bolov