2014-09-29 89 views
-1

我想存儲具有特定名稱的對象。存儲具有名稱的對象的數據結構

我想使用struct,然後將它們存儲在vector,但有人建議我應該使用不同的數據結構,更簡單一點,但我似乎找不到一個。

我現在的( 「複雜」)的解決方案:

//in header file 
struct objStorage{ 
    Classname obj; 
    string name; 
}; 
vector<objStorage> vec; 

//in constructor 
objStorage firstObj; 
firstObj.obj = new Classname(); 
firstObj.name = "foo"; 
vec.push_back(firstObj); 

有沒有更簡單的解決方案(數據結構)?

我應該補充一點,我不需要結構,一旦我存儲(複製?)它在向量中,因爲這一切都發生在另一個類(構造函數),所以我不想在調用構造函數時出現任何問題多次。

+1

你想如何使用它?按名稱查看?按名稱順序列出它們?你也設置'obj'爲'新的Classname'和''foo''',所以這個不會被編譯。誰刪除了'新的Classname()'? – doctorlove 2014-09-29 10:34:36

+0

以後我需要查看它們,是的。我的意思是firstobject,我會編輯它。析構函數負責刪除類名 – TheGuyWithStreetCred 2014-09-29 10:38:56

+2

爲什麼不去一個哈希映射?這不是一個修辭問題,我想知道是否有一些特殊的要求,因爲你不能使用它。 – 2014-09-29 10:45:23

回答

3

如果您想通過一些關鍵查找物品,例如一個字符串,用經典的東西是map

std::map<std::string, Classname> items; 
std::pair<std::map<std::string, Classname>::iterator, bool> inserted = 
    items.insert(std::make_pair(std::string("foo"), Classname())); 
items["bar"] = Classname(); 

在此設置,如果你真的想你想使用指針,你應該考慮某種形式的智能指針。還有其他選項,例如,C++ 11引入了其他查找結構 - 例如,無序的地圖。

+0

這就是我所需要的,我來自java,但完全忘了地圖 – TheGuyWithStreetCred 2014-09-29 10:50:09