【发布时间】:2009-11-06 11:44:49
【问题描述】:
我为游戏制作者创建了一个 dll。 dll 的数组真的很慢,所以在询问了一下后,我了解到我可以在 c++ 中使用地图并制作一个 dll。
无论如何,我不能代表我需要存储在 3d 数组中的内容: 信息[id][编号][编号] 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;
所以第一个map,objIdMap存储id作为key,一个指向另一个map的指针,存储代表设置的数字作为key,设置的值作为value。
但是,这是针对游戏的,因此可能需要存储具有自己 id 和设置的新对象(有时每隔几秒就有一百个左右的新对象),而现有对象需要不断地检索每个对象的值游戏的步骤。地图不能处理这个吗?我与游戏制造商的阵列有一个非常相似的事情,它工作得很好。
【问题讨论】:
-
您显然不了解维度和值之间的区别。 “id 为 101 的对象的值为 4 用于设置 1”转换为
information[101][1] = 4; -
您几乎肯定不想使用 double 作为地图的键 - 浮点错误会对检索项目所需的比较造成严重破坏。
-
可能。浮点比较是确定性的。
objIdMap[1.0]与objIdMap[1.0]、objIdMap[0.5+0.5]完全相同,但可能不是objIdMap[(1.0/3.0)*3.0]。