2d数组有两种不同的数据类型?

时间:2012-10-04 16:17:58

标签: c++ arrays

在c ++中,我试图创建一个数组来存储两种不同的数据类型。基本上,我想要一个ID和实际的数据类型。

伪码:

array[int][myObj]

0, myObj1
1, myObj2
2, myObj3

我明白这不是如何声明一个数组。这个功能可以吗?我是否必须使用结构创建自定义类?

2 个答案:

答案 0 :(得分:5)

这取决于您想要如何使用它。有许多选项都具有有效的用例:

  1. 一个简单的myObj数组:myObj array[]。这与您给出的示例匹配,因为对象的关联ID只是数组中该对象的索引。第一个元素有ID 0,第二个元素有ID 1等。但是,为了灵活性和良好的C ++风格,你应该真正使用std::vectorstd::array

  2. 如果要将每个对象与固定ID相关联,而不管其在数组中的位置(也可能在其他位置)。您可以使用std::pair<int, myObj>将整数与对象的实例配对。你可以像这样使用它:

    std::vector<std::pair<int, myObj>> v;
    v.push_back(std::make_pair(0, myObj1));
    

    与此类似的替代方法是将ID封装在myObj类中。但是,在某些情况下这可能不合适(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代替

答案 1 :(得分:0)

在C ++中,数组的所有成员都是相同的类型,而多维数组实际上是作为一维数组实现的。

如果你只想要一个包含两种不同类型行的数组,我建议:

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就是你的选择。