我想创建一个映射,其中键是 int,值是数组列表 ( int[][]
)。
我试过这个:
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
(首选),或者使用std::list
ofint**
并动态分配您的 2D 数组。
但是,我会考虑重新考虑您的设计。这真的是你想要的结构吗?是否应该将任何数据分组到一个struct
?