構造体のセットの配列を処理する最も効率的な方法を見つけようとしています。つまり、現時点では、次の構造を取得しています。
struct myStruct{
double p1;
double p2;
bool p3;
double w;
}
そのため、モデリングするオブジェクトには 3 つのプロパティとそれらに割り当てられた重みがあります。現在、これらは固定サイズ (たとえば 10) の配列に配置されており、オブジェクトの重みの複数の組み合わせ (たとえば 1000) があります。
const int nObj = 10;
const int n = 1000;
myStruct comb[n][nObj];
最後に、サイズが 10 の配列を渡す関数がいくつかあります。
double evalComb(myStruct (&ms)[nObj], double q1, double q2){
double output = 0;
for(int i = 0; i < nObj; i++){
output += // calculate some stuff using p1,p2,p3,w and other params
}
return output;
};
ここでの問題は、 , , の 10 個の値のセットがp1
1000p2
個p3
の組み合わせすべてで固定されていることです (const は除く)。変更されるのは 10 個の weights のセットだけですw
。この種のことは、1000回すべてをコピーするのはメモリの無駄だと思います...私は動作するコードを持っていますが、それをより速くしたいと思っています.その関数は何百万回も呼び出され、時間の 90% はそこに費やされます)。構造体から重みを取得し、構造体の 1 次元配列を残して 2 次元の二重配列を作成する方がよいでしょうか? これは、別の配列パラメーターが関数に渡されることを意味しますが、速度が低下しませんか? たぶん、代わりに配列を含む構造体が必要ですか?これで発生する可能性のある他の問題はありますか?