当涉及到快速删除时,C++矢量的替代方案是什么
What alternative to C++ vector when it comes to fast deletion?
向量在许多情况下是首选,因为随机访问是O(1),因为没有足够快的容器,或者至少是O(log(n))。
我对向量的问题是vector<>::erase()
是O(n),map<>::erase()
更快,是一个更好的容器。
另一种选择是使用对象池,但它不是标准容器,实现可能会因使用而异,所以我不太喜欢使用我不太了解或不太了解的东西。
地图似乎是矢量<>的一个很好的替代方案当经常发生删除时,但我想知道是否有更好的替代方案。
那么,有没有一个容器既能快速随机访问又能快速删除呢?
有没有一种常用的方法来创建对象池?
在快速删除方面,C++向量的替代方案是什么?
擦除向量的最后一个元素(即pop操作)具有恒定的复杂性,因此如果您不需要保持序列的有序性,那么一个有效的解决方案是将目标元素与最后一个交换,然后pop它
链表具有保持序列顺序的恒定复杂度删除,但索引查找是线性的(即不是随机访问)。
(无序)映射确实具有渐近有效的查找和擦除,但你不会得到与向量相同的行为。如果创建一个索引->元素映射,并从索引i
中移除元素,则i - 1
和i + 1
之间会有一个间隙,而向量会将索引大于i
的元素向左移动。
可索引跳过列表具有对数(平均值;最坏的情况是线性)查找和删除功能。但是,在标准库中没有实现它。
相关文章:
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- gcc中cl/NODEFAULTLIB的替代方案是什么
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- Windows(Visual Studio)中的-fpermssive标志的替代方案是什么
- COM 客户端连接 COM 服务器所需的文件是什么(进程外方案)
- 构建C 插件时的错误,该解决方案是什么
- 当涉及到快速删除时,C++矢量的替代方案是什么
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 正在(在构造函数中)将其包含一个不良设计的指针传递,如果是的,则解决方案是什么
- 暂停和恢复线程的最佳解决方案是什么?
- Windows上的模板有什么问题?解决方案是什么
- 标准C 库的替代方案是什么,并通过明确的实现来提升
- 我试图通过我的方案实现的面向对象的想法是什么?
- CppUTest中extern关键字的替代方案是什么
- 来自 std::find 的此错误的优雅解决方案是什么
- VS 解决方案的默认目录或起始目录是什么
- ZeroMQ 的替代方案是什么,用于移动协议缓冲区有效负载
- 基于CRTP的解决方案会是什么样子
- 原生 GUI 的解决方案是什么?
- 函数指针:从性能的角度来看,简单的规范使用是否不好?如果是这样的话,c++11的替代方案是什么