我想保留一个ID和大小的运行记录,这些ID和大小可以单独修改,也可以通过id访问,也可以按大小顺序访问。使用STL,我能想到的唯一事情是:
set<pair<int,int>,custom_comp>
我每次修改它时都会移除并重新插入该对。很大的缺点:无法通过id访问,因此O(N)可以访问任何内容,因为哈希表未被使用,我必须遍历所有内容以通过id查找... unordered_map<int,int>
我只需要按顺序转储和排序(或者搜索max,如果我需要的话)。大的缺点,O(N)得到最大值,O(N log(N))来排序(大概)。不是世界末日,但如果有一个类似priority_queue
的容器允许访问整个堆或类似map
的容器进行重新排序(通过价值)修改。 STL中是否存在这样的事情?在Boost?如果没有,为什么不呢? (至少就这样,即使我不得不使用凌乱的解决方案,我也会学习一些数据结构)
答案 0 :(得分:2)
Boost MultiIndex允许您通过多个键元素维护元素顺序的集合,在您的情况下,您可以使用两个有趣的数据(id和大小顺序)作为用于对多索引和数据结构进行排序的键允许原位替换元素(即使更改键,如果键被更改,替换性能为O(log N),而O(1)与其他数据一样)。