我想过存放一些物品......现在我不知道该选择什么。
所以,现在我有了这样的代码:
std::map<std::string, Object*> mObjects;
但是,正如我之前所说的那样,由于在每次搜索中分配了std::string
,所以它很慢,所以键应该是整数。
为什么我选择std::string
作为关键?因为按名称访问对象非常容易,例如:
mObjects["SomeObj"];
所以我的第一个想法是:
std::map<int, Object*> mObjects;
和key是对象名称的CRC:
mObjects[CRC32("SomeObject")];
但它有点不稳定。我知道有特殊的哈希映射。
最后,我必须使用一些Compare
函数在地图中对对象进行排序。
关于我可以使用的容器的任何想法?
再次,主要观点:
P.S。提高使用率是允许的。
答案 0 :(得分:0)
我不能肯定地说,但是你总是用文字字符串访问地图中的项目吗?如果是这样,那么您应该只使用具有符号名称的连续枚举值,并使用适当大小的vector
。
假设你不知道名字,直到地图中的1000个项目看起来真的很小,可能是一个瓶颈。您确定查找是性能问题吗?你有没有想过确保是这样的?一般来说,使用最直观的容器会产生更好的代码(因为你可以更容易地掌握算法)代码。
你对构造字符串的评论是否暗示你一遍又一遍地将C字符串传递给find函数?尝试在应用程序中始终使用std::string
来避免这种情况。
如果您坚持使用两部分方法:我建议您将所有商品存储在vector
中。然后你有一个unordered_map
从字符串索引,另一个vector
将所有索引放入主容器。然后,您对第二个索引容器进行排序,以获得所需的顺序。最后,当您从主容器中删除项目时,您需要清理其他两个引用容器。