私は Michael (最初の著者) で、現在 ID La-AIDA を持っています。
まず、皆さん、Boost & Fusion は私にとって初めてのことでしたが、ありがとうございました。
Éric へ: 1 つのタイプミス: v[1] には N_1 個のエントリ、v[2] には N_2 個のエントリが必要です。C配列ではなく、STLのようなものが欲しいです(境界チェックがなく、追加するオプションがありません)。
Éric への新しいコメント: 私はあなたの解決策を試しましたが、(ダミークエリを削除した後、ほぼ) すぐに機能しました! ありがとうございました!しかし:次のようなものが必要です
for (i = 1;i < 30;i++) {
cout << s.At<i>[0] << endl;
}
つまり、At<..> のインデックスは可変である必要があります (つまり、30 個のハードコードされたものを個別に処理する代わりにインデックスを実行できるようにすることが重要です)
が、gcc はエラーで不平を言います: 'i' cannot appear in定数式
「Java のように」について: AfaIk、Java の 2 次元行列は int v[10][10] ではありません。固定次元ですが、int[][] v; のようなものです。あなたが最初に持っている場所
v = new int[10][];
(または同様の構文)そして、これがポイントです:
v[0] = new int[1];
...
v[9] = new a[10];
これにより、三角行列、またはもちろん好きな形式が作成されます。実際、通常の 10 行 10 列の行列でも、1 プラス 10 個の new が必要です。
構造自体について: 同等のデータ構造は次のようになります。
vector<int> v1;
vector<pair<int,int>> v2;
vector<int,int,int> v3;
...
vector<int[29]> v29;
ただし、30 の部分のそれぞれに個別に対処する必要があります。
v[5][3][123] = 99;
定義せずに、123 番目の 5 タプルの 3 番目のコンポーネントを 99 に設定すると言うことができるようにしたい
vector<int> v[30][30];
これはトリックを行いますが、使用されないため、膨大なスペースを無駄にし
v[1][2..30][0..\infty] or more generally v[i][i+1..30][*]
ます.
したがって、私の問題では、 int 、別のペア、トリプル、...、 int の 30 タプルのリストがあり、これらはすべて単一の構造内で、スペースを無駄にすることなくソート可能である必要があります。