我爲gamemaker創建了一個dll。 dll的數組在那裏真的很慢,所以在詢問了一下後,我學會了我可以在C++中使用地圖並製作一個dll。C++地圖真的很慢嗎?
無論如何,生病代表我需要存儲在一個3d數組: 信息[編號] [編號] [編號] 該id對應於一個對象ID。第一個數字字段的範圍是0 - 3,每個數字代表不同的設置。所述第二數目字段表示在編號字段1. 所以..
information[101][1][4];
information[101][2][4];
information[101][3][4];
這將轉化爲「ID爲101的對象具有用於設置1,2和3的4值」的設置值。 我這樣做是爲了嘗試和與地圖複製:
//declared as a class member
map<double, map<int, double>*> objIdMap;
///// lower down the page, in some function
map<int, double> objSettingsMap;
objSettingsMap[1] = 4;
objSettingsMap[2] = 4;
objSettingsMap[3] = 4;
map<int, double>* temp = &objSettingsMap;
objIdMap[id] = temp;
所以第一張地圖,objIdMap存儲ID爲關鍵,一個指向另一個地圖存儲代表設置爲重點的數量,設置的值作爲值。然而,這是針對遊戲的,因此可能需要存儲具有其自己的ID和設置的新對象(有時每隔幾秒鐘就會有一百個左右的新對象),並且現有的對象不斷需要檢索遊戲的每一步。地圖無法處理?我有一個非常類似的事情與遊戲製造商的陣列和它工作得很好。
你不明白維度和價值之間的區別。 「ID爲101的對象的值爲4,設置爲1」轉換爲信息[101] [1] = 4;' – MSalters 2009-11-06 12:12:26
你幾乎肯定不想使用double作爲你的map的鍵 - 浮點錯誤會對檢索項目所需的比較造成嚴重破壞。 – 2009-11-06 12:15:52
它可能。浮點比較是確定性的。 'objIdMap [1.0]'與objIdMap [1.0]','objIdMap [0.5 + 0.5]'完全相同,但可能不是'objIdMap [(1.0/3.0)* 3.0]'。 – MSalters 2009-11-06 12:25:48