c++ - 用于按排序顺序存储元素并允许快速索引的数据结构?

标签 c++ data-structures vector set

我需要一个排序和索引的容器。我想基于 std:set 或 std::vector 构建它。通过使用 set,我需要昂贵的 std::distance 来计算其元素的索引。通过使用 vector,我知道添加或删除元素的成本很高。假设我的元素是一个指针(小对象)。我知道两个操作的复杂性是一样的。但是哪个更快呢?谢谢。

最佳答案

如果您需要一个支持排序顺序和按索引查找的数据结构,您绝对应该查看 order statistic tree ,这是一个专门为支持这些操作而设计的数据结构。它支持在 O(log n) 时间内插入和删除,在 O(log n) 时间内查找元素的索引,以及在 O(log n) 时间内按值或按索引查找,因此它应该比 O(log n) 快得多 vector 或集合方法。

不幸的是,STL 没有构建订单统计树,因此您必须搜索第三方库 (this earlier question and answer provides an example of one)。也就是说,您应该期望从订单统计树中获得的加速应该使它非常值得投资。

希望这对您有所帮助!

关于c++ - 用于按排序顺序存储元素并允许快速索引的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14124825/

相关文章:

math - 将复杂矩阵转换分解为一系列简单转换?

java - [java.lang.String;无法转换为 java.lang.String

c++ - 发布 Qt 程序。依赖问题

c++ - fatal error : QTextStream: No such file or directory

c++ - 为什么 new (*)[2] 被禁止?

data-structures - count-min 草图是否比典型的稀疏矢量格式占用更少的空间?

java - 同步静态 vector

python - 重复访问多个文件时出错

ios - 如何正确构建 Firebase 数据库?

algorithm - 旅行推销员 - 城市预算