【发布时间】:2008-09-24 07:43:42
【问题描述】:
地图非常适合轻松完成任务,但它们会占用内存并且存在缓存问题。当您的地图处于可能很糟糕的关键循环中时。
所以我想知道是否有人可以推荐另一个具有相同 API 但使用向量或哈希实现而不是树实现的容器。我的目标是交换容器,而不必重写所有依赖于地图的用户代码。
更新:性能方面最好的解决方案是在 std::vector 上测试地图外观
【问题讨论】:
地图非常适合轻松完成任务,但它们会占用内存并且存在缓存问题。当您的地图处于可能很糟糕的关键循环中时。
所以我想知道是否有人可以推荐另一个具有相同 API 但使用向量或哈希实现而不是树实现的容器。我的目标是交换容器,而不必重写所有依赖于地图的用户代码。
更新:性能方面最好的解决方案是在 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 能帮到你?
【讨论】:
参见Loki::AssocVector 和/或 hash_map(大多数 STL 实现都有这个)。
【讨论】:
如果您的密钥是一种可以非常快速地比较的简单类型,并且您的条目不超过几千个,则只需将您的配对放在 std::vector 中并迭代以找到您的值,您就可以获得更好的性能。
【讨论】:
boost::property_map 概念集,尤其是 boost::vector_property_map 是您正在寻找的...