包含列表的c ++映射

时间:2013-02-12 14:17:15

标签: c++ stdmap stdlist

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

我试过了:

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

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

1 个答案:

答案 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