我想创建一个键是int的映射,值是一个数组列表(int[][]
)。
我试过了:
const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;
但它不会编译,我不明白为什么......(R和C是程序的参数,但在执行过程中不会改变)。
答案 0 :(得分:4)
数组不是可复制的,也不是可复制的,这是标准容器的元素必须是。您的代码将按原样编译,但是数组类型会破坏标准容器的要求,并且您将遇到未定义的行为。你不能拥有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
int**
并动态分配2D数组。
但是,我会考虑重新考虑一下你的设计。这真的是你想要的结构吗?是否应将任何数据分组为struct
?