C ++では、2つの異なるデータ型を格納する配列を作成しようとしています。基本的に、IDと実際のデータ型が必要です。
擬似コード:
array[int][myObj]
0, myObj1
1, myObj2
2, myObj3
これは配列を宣言する方法ではないことを理解しています。この機能は可能ですか?構造体を使用してカスタムクラスを作成する必要がありますか?
それはあなたがそれをどのように使いたいかによって異なります。すべて有効なユースケースを持ついくつかのオプションがあります。
myObj: の単純な配列myObj array[]
。これは、オブジェクトの関連付けられた ID が単に配列内のそのオブジェクトのインデックスであるため、指定した例と一致します。最初の要素の ID は 0、2 番目の要素の ID は 1 などです。ただし、柔軟性と適切な C++ スタイルのために、実際には または のいずれかを使用する必要がありstd::vector
ますstd::array
。
配列内の位置に関係なく (場合によっては他の場所でも)、各オブジェクトを固定 ID に関連付ける場合。a を使用しstd::pair<int, myObj>
て、整数とオブジェクトのインスタンスをペアにすることができます。次のように使用します。
std::vector<std::pair<int, myObj>> v;
v.push_back(std::make_pair(0, myObj1));
これに代わる同様の方法は、myObj クラス内に ID をカプセル化することです。ただし、これは場合によっては適切ではない場合があります (ID は実際には myObj の一部ではなく、同じオブジェクトに対して別の ID がいつでも使用される可能性があります)。
配列内の要素に ID でアクセスできるようにする必要がある場合は、std::map<int, myObj>
. これにより、整数 ID が myObj のインスタンスにマップされます。次のように使用します。
std::map<int, myObj> m;
m.insert(std::make_pair(0, myObj1));
これで、たとえばm[0]
. アクセス時間を短縮したいが、要素の順序を気にしない場合は、std::unordered_map
代わりにa を使用できます
C++ では、配列のすべてのメンバーは同じ型であり、多次元配列は実際には 1 次元配列として実装されます。
2 つの異なる型を含む行を含む配列が必要な場合は、次のことをお勧めします。
std::vector<std::pair<int, MyObj> > vec;
または:
std::pair<int, MyObj> arr[200]; // generally always prefer std::vector over array, but this is possible
int に基づいて MyObj オブジェクトの検索を行いたい場合は、 std::map または std::multimap が適しています。