我是迈克尔(最初的作者),现在拥有 ID La-AIDA
首先,谢谢大家,Boost & Fusion 对我来说是新的。
致 Éric:一个错字:v[1] 应该有 N_1 个条目,v[2] N_2 等等。我想要类似 STL 的东西,而不是 C 数组(缺少边界检查,没有添加它的选项)。
对 Éric 的新评论:我尝试了您的解决方案,它立即起作用(几乎,在删除虚拟查询之后)!谢谢!但是:我需要类似的东西
for (i = 1;i < 30;i++) {
cout << s.At<i>[0] << endl;
}
也就是说, At<..> 的索引应该是可变的(这就是重点,能够运行索引而不是分别处理 30 个硬编码的东西)
但是 gcc 抱怨错误:'i' cannot appear in一个常量表达式
关于“as in Java”:AfaIk,Java 中的二维矩阵不是一些 int v[10][10];具有固定尺寸,但类似于 int[][] v; 你第一次有一个
v = new int[10][];
(或类似的语法)然后,这就是重点:
v[0] = new int[1];
...
v[9] = new a[10];
它制作了一个三角矩阵,或者当然是您喜欢的任何形式。事实上,一个常规的 10×10 矩阵也需要 1 加 10 个新矩阵。
关于结构本身:等效的数据结构是
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's 列表,另一个对,三元组,...,30 个 int 元组的列表,它们都应该是可排序的等,在一个结构中,不会浪费空间。