2

C ++では、2つの異なるデータ型を格納する配列を作成しようとしています。基本的に、IDと実際のデータ型が必要です。

擬似コード:

array[int][myObj]

0, myObj1
1, myObj2
2, myObj3

これは配列を宣言する方法ではないことを理解しています。この機能は可能ですか?構造体を使用してカスタムクラスを作成する必要がありますか?

4

2 に答える 2

5

それはあなたがそれをどのように使いたいかによって異なります。すべて有効なユースケースを持ついくつかのオプションがあります。

  1. myObj: の単純な配列myObj array[]。これは、オブジェクトの関連付けられた ID が単に配列内のそのオブジェクトのインデックスであるため、指定した例と一致します。最初の要素の ID は 0、2 番目の要素の ID は 1 などです。ただし、柔軟性と適切な C++ スタイルのために、実際には または のいずれかを使用する必要がありstd::vectorますstd::array

  2. 配列内の位置に関係なく (場合によっては他の場所でも)、各オブジェクトを固定 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 がいつでも使用される可能性があります)。

  3. 配列内の要素に 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 を使用できます

于 2012-10-04T16:41:44.187 に答える
1

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 が適しています。

于 2012-10-04T16:27:06.667 に答える