2008-09-24 100 views
10

地图很容易完成任务,但它们都是内存耗尽,并且存在缓存问题。当你在一个可能很糟糕的关键循环中有一张地图时。任何人都可以推荐一个C++ std :: map替换容器吗?

所以我想知道是否有人可以推荐另一个具有相同API的容器,但使用可以说是矢量或哈希实现而不是树实现。我的目标是交换容器,而不必重写所有依赖地图的用户代码。

更新:性能明智的最佳解决方案将是对一个std一个测试图门面::矢量

回答

4

参见Loki::AssocVector和/或的hash_map(最STL实现具有这一个)。

+0

这基本上是一个有类似地图的界面的排序std :: vector >。该许可证足够宽容,可以将其撕掉并粘贴到您的项目的某个地方。 – 2008-09-24 14:15:21

+0

对不起,我到现在还没回来检查答案,但这正是我需要的!感谢一个完美的插件(考虑我的使用案例) – 2008-10-17 01:28:07

2

如果您的钥匙是一种可以非常快速比较的简单类型,并且您只有几千个条目,那么只需将您的钥匙对放入std::vector并重复查找您的价值即可获得更好的性能。

+0

理想情况下,这将是最好的解决方案,但我不想写(和调试)矢量的接口/包装是Map兼容的。你知道这种技术的实施吗? – 2008-09-24 08:06:44

11

您可以使用std :: tr1 :: unordered_map,它已经存在于大多数STL实现中,并且是C++ 0x标准的一部分。

这里是它的当前签名:

template <class Key, 
      class T, 
      class Hash = std::tr1::hash<Key>, 
      class Pred = std::equal_to<Key>, 
      class Alloc = std::allocator<std::pair<const Key, T> > > 
class unordered_map; 
相关问题