【问题标题】:ordered associative data structure optimised for fast lookup?为快速查找优化的有序关联数据结构?
【发布时间】:2013-01-17 22:19:36
【问题描述】:

我正在寻找针对快速查找优化的std::map-esque 数据结构。

一种方法是使用已排序的std::vector 作为底层存储来实现地图的接口 - 由于随机访问迭代器和缓存位置,这将提供快速的binary_search

但是,这听起来像是对轮子的重新发明。这样的东西肯定已经存在了吗?

是否有使用 std::vector 进行存储的开源有序关联数据结构?

编辑:

响应 cmets 的建议只需使用 std::map - 请在此处阅读:http://lafstern.org/matt/col1.pdf

【问题讨论】:

  • 地图具有快速查找功能。你希望它快多少?!
  • 您可能正在寻找来自 Boost.Containers 的 Boost 的“平面地图”。
  • std::map 有什么问题?它非常 std::map-esque,并且针对胖查找进行了优化。
  • @JesseGood: unordered_map 很奇怪,它不是一个 ordered 关联数据结构......看图。 :P
  • Kerrek 建议您查看boost::flat_map

标签: c++ stl


【解决方案1】:

Boost.Containers 库有一个有序的地图容器,其存储由一个名为 boost::flat_map 的连续数组支持。但请注意,渐近的理论复杂度与标准 map(对数)相同,更好的选择取决于用例的许多细节:插入与查找、迭代, 迭代器失效要求。

由于接口非常相似,因此应该可以通过 typedef 逐个替换并分析相关性能,这是您绝对必须做的事情。

【讨论】:

    【解决方案2】:

    是否有一个开源有序关联数据结构使用 用于存储的 std::vector?

    如何维护一个排序的vector?这样查找可以很快(二进制搜索,没有指针遍历)。

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2014-06-23
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多