Карта C++, содержащая список
Я хотел бы создать карту, где ключом является int, а значением является список массивов (int[][]
).
Я попробовал это:
const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;
но он не скомпилируется, и я не понимаю, почему... (R и C являются параметрами программы, но не изменяются во время выполнения).
1 ответ
Массивы не являются копируемыми или назначаемыми для копирования, что должно быть элементом стандартного контейнера. Ваш код будет скомпилирован как есть, но тип массива нарушает требования для стандартных контейнеров, и вы столкнетесь с неопределенным поведением. Вы не можете иметь 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
?