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

Jef*_*eff 2 c++ arrays

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

伪代码:

array[int][myObj]

0, myObj1
1, myObj2
2, myObj3
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*eld 5

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

  1. 一个简单的myObj数组:myObj array[].这与您给出的示例匹配,因为对象的关联ID只是数组中该对象的索引.第一个元素有ID 0,第二个元素有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));
    
    Run Code Online (Sandbox Code Playgroud)

    与此类似的替代方法是将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));
    
    Run Code Online (Sandbox Code Playgroud)

    现在,您可以使用,例如,访问元素m[0].如果您想加快访问时间并且不关心订购的元素,您可以使用std::unordered_map替代品