在c ++中,我试图创建一个数组来存储两种不同的数据类型.基本上,我想要一个ID和实际的数据类型.
伪代码:
array[int][myObj]
0, myObj1
1, myObj2
2, myObj3
Run Code Online (Sandbox Code Playgroud)
我明白这不是如何声明一个数组.这个功能可以吗?我是否必须使用结构创建自定义类?
这取决于你想如何使用它.有许多选项都具有有效的用例:
一个简单的myObj数组:myObj array[].这与您给出的示例匹配,因为对象的关联ID只是数组中该对象的索引.第一个元素有ID 0,第二个元素有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));
Run Code Online (Sandbox Code Playgroud)
与此类似的替代方法是将ID封装在myObj类中.但是,在某些情况下这可能不合适(ID实际上不是myObj的一部分,单独的ID可以随时用于同一个对象).
如果您需要能够通过其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替代品