C++ std::列表和std::向量-两个世界中最好的?
作者:C++ std::列表和std::向量-两个世界中最好的?,c++,list,vector,data-structures,containers,C++,List,Vector,Data Structures,Containers,作者: 向量:最后的插入是固定的,摊销时间,但是其他地方的插入是一个昂贵的O(n) 列表:您不能随机访问元素,因此获取列表中的特定元素可能会很昂贵 我需要一个容器,这样您既可以在O(1)时间内的任何索引处访问元素,也可以在O(1)时间内的任何索引处插入/删除元素。它还必须能够管理数千个条目。有这样的容器吗 编辑:如果不是O(1),那么有些X表示任何表示有序列表的数据结构都不能比O(log n/log n)具有插入、按索引查找、删除和更新的全部时间,因此不存在这样的数据结构 不过,有些数据结构
- 向量:最后的插入是固定的,摊销时间,但是其他地方的插入是一个昂贵的O(n)
- 列表:您不能随机访问元素,因此获取列表中的特定元素可能会很昂贵
希望这有帮助 看看几个数据结构
数组树。树按数组索引排序,以便快速索引搜索
已排序数组的已排序树。几乎所有的数据库都使用这个东西
两个都不是O(1),因为那是不可能的。但是它们非常好。由于内存行为,无论算法复杂度如何,
std::vector几乎总是最佳选择。关于以下主题的一些好的阅读(以及一些好的浏览链接):@super你有没有测试过“它太慢”的说法,或者你只是基于时间复杂度?这在很大程度上取决于平台,但通常在其他容器变得更快之前,它至少需要几万或几十万个元素。具体来说,您想做什么?我猜还有其他一些专门用于您的目的的数据结构在这里会更有用。@super这并没有回答我的问题。您仍然需要填充向量,那么您关心的是该填充期间的复杂性,还是该填充之后的复杂性?你还没有提供任何关于如何使用你所寻找的容器的有用细节。理论结果的功劳+1列表和向量都没有次线性查找,这意味着我们可以牺牲它。@moonigduck我想这取决于“查找”的含义。我假设这是“按索引查找”,在这种情况下,向量在前面工作,但在插入和删除时速度不够快。然后,您完全可以使用logN insert、indexLookup、remove和indexUpdate创建一个容器。我做了一个。是的!这就是我所指的顺序统计树。(这通常作为平衡的BST来完成,但如果您只使用订单统计树的形状,而不是排序功能,则会得到一个序列,其中每个操作都有对数成本。)