当涉及到快速删除时,C++矢量的替代方案是什么

What alternative to C++ vector when it comes to fast deletion?

本文关键字:是什么 方案 C++ 删除      更新时间:2023-10-16

向量在许多情况下是首选,因为随机访问是O(1),因为没有足够快的容器,或者至少是O(log(n))。

我对向量的问题是vector<>::erase()是O(n),map<>::erase()更快,是一个更好的容器。

另一种选择是使用对象池,但它不是标准容器,实现可能会因使用而异,所以我不太喜欢使用我不太了解或不太了解的东西。

地图似乎是矢量<>的一个很好的替代方案当经常发生删除时,但我想知道是否有更好的替代方案。

那么,有没有一个容器既能快速随机访问又能快速删除呢?

有没有一种常用的方法来创建对象池?

在快速删除方面,C++向量的替代方案是什么?

擦除向量的最后一个元素(即pop操作)具有恒定的复杂性,因此如果您不需要保持序列的有序性,那么一个有效的解决方案是将目标元素与最后一个交换,然后pop它

链表具有保持序列顺序的恒定复杂度删除,但索引查找是线性的(即不是随机访问)。


(无序)映射确实具有渐近有效的查找和擦除,但你不会得到与向量相同的行为。如果创建一个索引->元素映射,并从索引i中移除元素,则i - 1i + 1之间会有一个间隙,而向量会将索引大于i的元素向左移动。

可索引跳过列表具有对数(平均值;最坏的情况是线性)查找和删除功能。但是,在标准库中没有实现它。