我想用int和我自己的自定義類創建映射。有沒有辦法做到這一點?作爲第二種類型的自定義類的C++ STL映射
map<int, MyClass> myMap;
如果不是,我該如何去做到這一點?基本上,我想要一個ID(或最好是enum
)指向我自己的自定義類。在大多數其他語言中,這將是一個簡單的哈希。
我想用int和我自己的自定義類創建映射。有沒有辦法做到這一點?作爲第二種類型的自定義類的C++ STL映射
map<int, MyClass> myMap;
如果不是,我該如何去做到這一點?基本上,我想要一個ID(或最好是enum
)指向我自己的自定義類。在大多數其他語言中,這將是一個簡單的哈希。
#include <map>
std::map<int, MyClass> myMap;
MyClass foo;
myMap[5] = foo;
myMap[5].bar = 10;
你確實需要MyClass
是默認 - 和禁止複製構造的,因此它可以被創建(如果你使用,例如,myMap[5]
),並複製到地圖。
是唯一的條件是:
所以你只需要確保你的對象是可複製構造的,以便它可以複製到地圖中。
當然,如果僅存儲指針,則甚至不需要複製構造函數而不是地圖中類的實例。 – Troubadour 2009-09-25 16:50:59
@Troubadour:分類爲true。但在這種情況下,你正在存儲一個指針。相當於POD類型的拷貝構造函數是簡單的賦值(所以我總是把它們等同起來),這只是指針的一個副本。這個的另一方面影響是地圖擁有指針而不是對象。地圖將釋放指針,但不釋放指向的對象(因此不刪除)。爲此我們有boost :: ptr_map
你應該使用這樣
的typedef的std ::地圖myMapType;
myMapType myMap;
但在這個插入你的類時,如果你插入一個以上的時間,相同的鍵要小心,你將永遠不會得到通知:
呼叫myMapType:迭代ITR myMap.find(關鍵),這取決於返回類型和你的程序需求,你可以procced。
像明智使用[]操作像
somefunc(myMap[10]);
嘗試狂熱訪問的任何元素正如你不會從地圖甚至有注意到插入鑰匙10
一個錯誤,我認爲你只需要默認的構造函數,如果你使用operator []。 – Troubadour 2009-09-25 16:49:04
是的,我認爲這是正確的。 – 2009-09-25 16:50:27
甚至可能會添加「typedef std :: map MyMapType;」 –
Bill
2009-09-25 17:04:47