我想创建一个映射,其中键是一个int,并且该值是一个数组列表(int[][]
)。包含一个列表的C++ map
我尝试这样做:
const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;
,但它不会编译,我不明白为什么...(R和C程序的参数,但在执行过程中不发生变化)。
我想创建一个映射,其中键是一个int,并且该值是一个数组列表(int[][]
)。包含一个列表的C++ map
我尝试这样做:
const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;
,但它不会编译,我不明白为什么...(R和C程序的参数,但在执行过程中不发生变化)。
数组不是可复制或可复制的,它是标准容器的元素必须是可复制的。您的代码将按原样编译,但是数组类型违反了标准容器的要求,您将遇到未定义的行为。您不能拥有std::list<int[R][C]>
。然而,C++ 11提供了一个很好的新的编译时间常数大小std::array
为您的乐趣:
typedef std::array<std::array<int, C>, R> array_2d;
typedef std::list<array_2d> array_list;
std::map<int, array_list> s;
否则,其他的替代品使用std::vector
代替std::array
(首选),或有一个int**
和std::list
动态分配你的二维数组。
但是,我会考虑对您的设计进行重新思考。这真的是你想要的结构吗?是否应将任何数据分组到struct
?
但是,OP的代码在GCC 4.7.2和Clang 3.2 – 2013-02-12 14:20:34
下编译得很好,谢谢,但我没有C++ 11 ...有没有另一种解决方案? – Jav 2013-02-12 14:21:38
@Jav:你在用什么编译器? – 2013-02-12 14:22:07
你使用什么编译器? – 2013-02-12 14:18:34
“不起作用”对你所看到的问题并不是很好的描述。你应该真的告诉我们,如果你想要任何人能够帮助... – sth 2013-02-12 14:20:08
你确定你不想使用向量?不管是否改变,R和C都不能是程序的参数。它们必须是不变的,必须具有已知的价值。因为int [R] [C]的大小在编译时必须知道。如果该数字未知,则必须使用动态调整大小的数组作为C++中的矢量。 –
Pihhan
2013-02-12 14:23:23