包含列表的c++映射

c++ map containing a list

本文关键字:映射 c++ 列表 包含      更新时间:2023-10-16

我想创建一个映射,其中键是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(首选),或者使用int**std::list并动态分配2D阵列。

不过,我想重新考虑一下你的设计。这真的是你想要的结构吗?是否应将任何数据分组为struct