1

キーが int で、値が配列のリスト ( ) であるマップを作成したいと思いますint[][]

私はこれを試しました:

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

しかし、コンパイルされず、理由がわかりません...(RとCはプログラムのパラメーターですが、実行中に変更されません)。

4

1 に答える 1

4

配列は、標準コンテナーの要素である必要があるコピー構築可能またはコピー割り当て可能ではありません。コードはそのままコンパイルされますが、配列型は標準コンテナーの要件を破り、未定義の動作に遭遇します。を持つことはできませんstd::list<int[R][C]>std::arrayただし、C++11 は、ユーザーの好みに合わせてサイズを変更した、新しいコンパイル時定数を提供します。

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::listofを使用しint**て 2D 配列を動的に割り当てるという別の方法があります。

ただし、デザインを少し再考することを検討します。これは本当にあなたが望む構造ですか?データのいずれかを にグループ化する必要がありstructますか?

于 2013-02-12T14:19:42.640 に答える