在C++中,我試圖創建一個數組來存儲兩個不同的數據類型。基本上,我想要一個ID和實際的數據類型。具有兩種不同數據類型的二維數組?
僞代碼:
array[int][myObj]
0, myObj1
1, myObj2
2, myObj3
我明白這不是如何聲明數組。這個功能可能嗎?我是否必須使用結構創建自定義類?
在C++中,我試圖創建一個數組來存儲兩個不同的數據類型。基本上,我想要一個ID和實際的數據類型。具有兩種不同數據類型的二維數組?
僞代碼:
array[int][myObj]
0, myObj1
1, myObj2
2, myObj3
我明白這不是如何聲明數組。這個功能可能嗎?我是否必須使用結構創建自定義類?
這取決於你想如何使用它。有許多選項,所有擁有有效的用例:
MyObj中的簡單數組:myObj array[]
。這與您給出的示例相匹配,因爲對象的關聯ID僅僅是數組中該對象的索引。第一個元素具有ID 0,第二個具有ID 1等。但是,爲了靈活性和良好的C++風格,您應該使用std::vector
或std::array
。
如果要將每個對象與固定ID關聯,而不管它在陣列中的位置(以及可能還有其他位置)。您可以使用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
代替
在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
如果您想根據MyObj中對象的查找,使int的std :: map或std :: multimap是要走的路。
直接回答,你需要一個結構(也許'的std :: pair'?)。然而,你最想要的是'std :: map'。 –
'std :: vector>''也許。 –
slaphappy
是什麼類型的簡單數組myObj - 不夠好?在你的例子中,這些ID只是數組中的索引。 –