1

我想创建一个映射,其中键是 int,值是数组列表 ( int[][])。

我试过这个:

const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;

但它不会编译,我不明白为什么......(R和C是程序的参数,但在执行过程中不会改变)。

4

1 回答 1

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::listofint**并动态分配您的 2D 数组。

但是,我会考虑重新考虑您的设计。这真的是你想要的结构吗?是否应该将任何数据分组到一个struct

于 2013-02-12T14:19:42.640 回答