Я хотел бы создать карту, где ключом является 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
из int**
и динамически распределять ваши 2D массивы.
Тем не менее, я бы подумал немного переосмыслить ваш дизайн. Это действительно структура, которую вы хотите? Должны ли какие-либо данные быть сгруппированы в struct
?
Других решений пока нет …