【问题标题】:Is there a container in STL or Boost that retains sorted values after modification?STL 或 Boost 中是否有容器在修改后保留排序值?
【发布时间】:2014-07-18 12:31:57
【问题描述】:

我想保留 id 和 size 的运行记录,它们可以单独修改并通过 id 以及大小顺序进行访问。使用 STL,我唯一能想到的是:

  1. set<pair<int,int>,custom_comp> 每次修改时我都会删除并重新插入该对。最大的缺点:不能通过 id 访问,所以 O(N) 访问任何东西,因为没有使用哈希表,我必须遍历所有内容以通过 id 查找...
  2. unordered_map<int,int> 当我需要它们时,我只是在其中转储和排序(或者搜索最大值,如果这就是我所需要的)。很大的缺点,O(N) 得到最大值,O(N log(N)) 排序(大概)。

不是世界末日,但如果有一个类似priority_queue 的容器允许访问整个堆或类似map 的容器可以在修改时重新排序(按值),那就太好了. STL中是否存在这样的事情?在升压?如果不是,为什么不呢? (至少这样,即使我不得不使用混乱的解决方案,我也会学到一些关于数据结构的知识)

【问题讨论】:

  • 你的意思是当你修改“key”值时,应该自动使用地图?
  • 提升多索引有优势

标签: c++ sorting c++11 boost stl


【解决方案1】:

Boost MultiIndex 让您通过多个关键元素维护元素顺序的集合,在您的情况下,您可以使用两个有趣的数据(id 和大小顺序)作为用于对多索引进行排序的关键,并且数据结构允许就地替换元素(即使更改键,如果更改键,替换性能是 O(log N) 并且没有 O(1) 与其他数据一样)。

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2011-05-12
    • 2011-12-04
    相关资源
    最近更新 更多