2012-10-04 151 views
2

在C++中,我試圖創建一個數組來存儲兩個不同的數據類型。基本上,我想要一個ID和實際的數據類型。具有兩種不同數據類型的二維數組?

僞代碼:

array[int][myObj] 

0, myObj1 
1, myObj2 
2, myObj3 

我明白這不是如何聲明數組。這個功能可能嗎?我是否必須使用結構創建自定義類?

+0

直接回答,你需要一個結構(也許'的std :: pair'?)。然而,你最想要的是'std :: map '。 –

+1

'std :: vector >''也許。 – slaphappy

+1

是什麼類型的簡單數組myObj - 不夠好?在你的例子中,這些ID只是數組中的索引。 –

回答

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)); 
    

    一個類似的替代方法是在你的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代替

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 

如果您想根據MyObj中對象的查找,使int的std :: map或std :: multimap是要走的路。

相關問題