【发布时间】:2011-04-08 17:44:40
【问题描述】:
我想存储一些对象......现在我不知道该选择什么。
所以,现在我有这样的代码:
std::map<std::string, Object*> mObjects;
但是,正如我之前在这里所说的,由于每次搜索都分配了std::string,所以速度很慢,所以键应该是整数。
为什么我选择std::string 作为键?因为通过名称访问对象非常容易,例如:
mObjects["SomeObj"];
所以我的第一个想法是:
std::map<int, Object*> mObjects;
并且key是对象名称的CRC:
mObjects[CRC32("SomeObject")];
但它有点不稳定。我知道这有特殊的哈希映射。
最后,我必须使用 Compare 函数对地图中的对象进行排序。
关于我可以使用的容器有什么想法吗?
再说一遍,要点:
- 通过字符串访问对象,但键应该是整数,而不是字符串
- 按某些功能对地图中的对象进行排序
附言提升使用是允许的。
【问题讨论】:
-
在说它很慢之前,您是否先使用字符串键测量了性能?
-
是由于运行时的限制而需要的字符串,还是编译时已知的所有值,可以用常量替换,例如:
const int SOME_OBJECT = 1; ... mObject[SOME_OBJECT] ... -
@thanatos 不,他们不能。有近 1000 个对象。
-
你能用
unordered_map吗? -
您可以查看 Boost.MultiIndex,它允许您在同一个容器中以各种方式索引项目。您可以使用散列索引进行快速搜索,并使用有序索引进行排序。
标签: c++ boost map containers