【问题标题】:Efficieny of stl::map of stl::setsstl::sets 的 stl::map 的效率
【发布时间】:2013-09-02 23:17:34
【问题描述】:

我相信我想使用 boost::icl::interval_map 来解决问题(描述为 here,如果 interval_maps 最终有效,我将发布完整的答案。)

我想使用interval_map<unsigned long long, set<foo*>>,但 boost::icl 的文档提到存在潜在的效率问题(在from 下方)。

我们正在引入使用字符串集的区间映射的区间映射,因为它具有教学优势。派对示例用于立即访问区间图和重叠聚合的基本思想。对于现实世界的应用程序,不一定建议使用一组 interval_map。它与 std::sets 的 std::map 具有相同的效率问题。尽管使用带有数值和其他有效数据类型的区间映射来获取关联值,但仍有很大的范围。

std::sets的std::map有什么效率问题? 以及如何避免它们?

【问题讨论】:

    标签: c++ boost stl boost-icl


    【解决方案1】:

    std::map<K, V>std::set<V> 都是由指针链接的基于节点的容器。遍历它们有很好的复杂性保证(即,每个单独的操作最多为 O(log n)),但实际上你需要相当大的容器来比较复杂性,例如,与 std::vector<std::pair<K, V>> 相比,尤其是在 K 和 @987654325 时@ 是基本类型。基于节点的容器的主要性能问题是它们在内存中或多或少地随机布局,而现代 CPU 喜欢访问以某种形式聚集的数据。

    当然,像往常一样,您需要在相当真实的数据集上测量不同实现之间获得的时间,以确定哪种数据结构产生最佳性能。

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2011-02-27
      • 1970-01-01
      • 2021-11-07
      • 2012-05-10
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2011-10-09
      相关资源
      最近更新 更多