stdmap — карта 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?

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]