2013-02-12 4 views
1

Я хотел бы создать карту, где ключ является int, а значение представляет собой список массивов (int[][]).C++ map, содержащий список

Я попытался это:

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

, но он не будет компилировать, и я не понимаю, почему ... (R и C являются параметрами программы, но не изменяется во время выполнения).

+0

Какой компилятор вы используете? –

+2

«Не работает» на самом деле не является хорошим описанием проблемы, которую вы видите. Вы действительно должны сказать нам, что пошло не так, если вы хотите, чтобы кто-нибудь мог помочь ... – sth

+1

Вы уверены, что не хотите использовать вектор ? R и C не должны быть параметрами программы, независимо от того, что было изменено или нет. Они должны быть постоянными и должны иметь известную ценность. Поскольку размер int [R] [C] должен быть известен во время компиляции. Вы должны использовать динамически измененные массивы, поскольку вектор находится на C++, если это число неизвестно. – Pihhan

ответ

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?

+1

Однако код OP компилируется под GCC 4.7.2 и Clang 3.2 –

+0

хорошо, спасибо, но у меня нет C++ 11 ... есть ли у вас другое решение? – Jav

+0

@Jav: Какой компилятор вы используете? –

Смежные вопросы