谁能推荐C ++ std :: map替换容器?

时间:2020-03-06 14:38:52  来源:igfitidea点击:

映射很容易使事情轻松完成,但是它们是内存消耗大,并且存在缓存问题。而且,当我们处于关键循环中时,地图可能会很糟糕。

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

更新:性能上最好的解决方案是在std :: vector上测试地图立面

解决方案

请参阅Loki :: AssocVector和/或者hash_map(大多数STL实现都具有此功能)。

如果密钥是一个可以快速比较的简单类型,并且条目不超过几千个,那么只需将对放入" std :: vector"并迭代以找到值,我们可能会获得更好的性能。

我们可以使用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;

也许Google SparseHash可以为我们提供帮助?