我想在固定大小的数组上插入和“删除”元素。每次操作后,元素都按排序顺序且连续(无间隙)。
第一个元素将被插入到中间。
是否有现有的容器(包括 Boost)可以做到这一点?我可以写一些逻辑,但这肯定是一个不常见的要求?
我可以在上面添加一些附加/非普通逻辑。
我想在固定大小的数组上插入和“删除”元素。每次操作后,元素都按排序顺序且连续(无间隙)。
第一个元素将被插入到中间。
是否有现有的容器(包括 Boost)可以做到这一点?我可以写一些逻辑,但这肯定是一个不常见的要求?
我可以在上面添加一些附加/非普通逻辑。
我怀疑是否有人已经预先构建了这种特殊的结构。除非你能保证大多数插入发生在接近尾声的时候,否则性能将会很糟糕。但当然,这种保证可能存在,例如在迭代构建稀疏矩阵时。
不管怎样,有了
boost::container::devector
andstd::upper_bound
你就拥有了使它成为单行函数所需的一切。但是,考虑到性能较差,请考虑替代方案,例如,
std::map
如果结构主要是读取,则仅在第一次访问时进行排序。看看
boost::container::flat_set
和boost::container::flat_map
。例如
住在科里鲁
打印预期的内容
更有趣的是,迭代器是随机访问的,并且确实引用相邻索引:
打印在 Coliru 上直播
静态/预分配和优化
有优化的构造函数/操作来采用已知的排序序列:
您甚至可以针对固定/小尺寸对它们进行优化。例如,一个简单的静态大小的地图,最多包含 10 个条目:
仍然以同样的方式工作。
这具有零运行时分配。