STL或Boost中是否有一个容器在修改后保留已排序的值?

时间:2014-07-18 12:31:57

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

我想保留一个ID和大小的运行记录,这些ID和大小可以单独修改,也可以通过id访问,也可以按大小顺序访问。使用STL,我能想到的唯一事情是:

  1. set<pair<int,int>,custom_comp>我每次修改它时都会移除并重新插入该对。很大的缺点:无法通过id访问,因此O(N)可以访问任何内容,因为哈希表未被使用,我必须遍历所有内容以通过id查找...
  2. unordered_map<int,int>我只需要按顺序转储和排序(或者搜索max,如果我需要的话)。大的缺点,O(N)得到最大值,O(N log(N))来排序(大概)。
  3. 不是世界末日,但如果有一个类似priority_queue的容器允许访问整个堆或类似map的容器进行重新排序(通过价值)修改。 STL中是否存在这样的事情?在Boost?如果没有,为什么不呢? (至少就这样,即使我不得不使用凌乱的解决方案,我也会学习一些数据结构)

1 个答案:

答案 0 :(得分:2)

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