2009-09-25 56 views
3

我想用int和我自己的自定義類創建映射。有沒有辦法做到這一點?作爲第二種類型的自定義類的C++ STL映射

map<int, MyClass> myMap; 

如果不是,我該如何去做到這一點?基本上,我想要一個ID(或最好是enum)指向我自己的自定義類。在大多數其他語言中,這將是一個簡單的哈希。

回答

9
#include <map> 

std::map<int, MyClass> myMap; 

MyClass foo; 
myMap[5] = foo; 
myMap[5].bar = 10; 

你確實需要MyClass是默認 - 和禁止複製構造的,因此它可以被創建(如果你使用,例如,myMap[5]),並複製到地圖。

+1

一個錯誤,我認爲你只需要默認的構造函數,如果你使用operator []。 – Troubadour 2009-09-25 16:49:04

+0

是的,我認爲這是正確的。 – 2009-09-25 16:50:27

+1

甚至可能會添加「typedef std :: map MyMapType;」 – Bill 2009-09-25 17:04:47

3

是唯一的條件是:

  • 密鑰類型是可比的(好)
  • 值類型爲複製施工的?

所以你只需要確保你的對象是可複製構造的,以便它可以複製到地圖中。

+0

當然,如果僅存儲指針,則甚至不需要複製構造函數而不是地圖中類的實例。 – Troubadour 2009-09-25 16:50:59

+2

@Troubadour:分類爲true。但在這種情況下,你正在存儲一個指針。相當於POD類型的拷貝構造函數是簡單的賦值(所以我總是把它們等同起來),這只是指針的一個副本。這個的另一方面影響是地圖擁有指針而不是對象。地圖將釋放指針,但不釋放指向的對象(因此不刪除)。爲此我們有boost :: ptr_map 2009-09-25 17:00:52

0

你應該使用這樣

的typedef的std ::地圖myMapType;

myMapType myMap;

但在這個插入你的類時,如果你插入一個以上的時間,相同的鍵要小心,你將永遠不會得到通知:

呼叫myMapType:迭代ITR myMap.find(關鍵),這取決於返回類型和你的程序需求,你可以procced。

像明智使用[]操作像

somefunc(myMap[10]); 

嘗試狂熱訪問的任何元素正如你不會從地圖甚至有注意到插入鑰匙10

相關問題