我需要擦除排序向量中的元素,同时抑制等于或大于n的复杂度。我知道vector . erase
方法会消除它,但它的复杂性是n。我可以用最后一个元素重写那个结构元素,然后使用回弹删除最后一个应该是常量的方法,但问题是它不会保持排序,所以我不得不重新排序。它甚至有可能解决这个问题并保持低于n的复杂度?向量中擦除<n复杂度的元素
3
A
回答
3
既然你需要它排序,std::vector
(据我所知)没有解决方案。但是,std::vector
似乎并不适合您的情况。 std::list
是你的一个选择(可能会更好)。
从该参考文献:http://www.cplusplus.com/reference/list/list/erase/
复杂
线性在擦除元素的数量(破坏)。
这意味着它将调用析构函数N次,其中N是要删除的项目数。所以,它是删除项目的数量(不是std::list
项目数量)线性关系
+1
感谢您的回答。 – kvway
3
如果您必须保持您的数据结构排序,并能够从中间擦除元素(s)具有高性能,更好地用另一个容器替换vector(例如set,multiset)?
+0
使用set/multiset的@kvway可能是您需要的,因为使用列表您可以访问一个元素的O(n)成本。 – ead
相关问题
- 1. 结构向量的擦除元素
- 2. 向量的余弦相似度,与<为O(n^2)复杂
- 3. 函数中的向量中的擦除元素
- 4. 擦除程序中的矢量元素
- 5. 擦除元素
- 6. 是否vector ::擦除向量中的重新排序元素?
- 7. 使用算法擦除向量中的特定元素
- 8. 如何内双擦除向量元素的循环
- 9. 如何擦除C++映射中的最后n个元素?
- 10. K-个元素N * N和向量
- 11. C++ std ::向量擦除元素0抛出异常
- 12. 2^n复杂度算法
- 13. vector :: erase不会擦除所需的元素,而是会擦除矢量中的最后一个元素
- 14. 增加比较向量元素的运行时复杂度的效率?
- 15. C++向量擦除检查
- 16. 如何用`std :: set`中的反向迭代器擦除元素?
- 17. 八度复杂元素操作
- 18. 移除向量元素使用向量中的条件<bool>
- 19. C++在for_each期间从擦除元素中删除元素
- 20. 通过判断该向量的元素来擦除2d向量C++的一个向量
- 21. unordered_set <int> :: iterator it + n的时间复杂度是多少?
- 22. 查找向量中的重复元素
- 23. Matlab:向量中重复的元素块
- 24. 从对象的矢量按值擦除矢量元素
- 25. 如何擦除物体矢量中的元素?
- 26. 如何从向量中删除元素<char>?
- 27. matlab:如何将复杂的双元素向量转换为24位向量(每个元素)?
- 28. 递归重复向量元素N次每个
- 29. STD向量的擦除和的push_back
- 30. C++矢量元素擦除与新矢量创建
不能做。或者a。)使用另一个数据结构b。)批量移除元素(参见擦除 - 删除习惯用法)c。)将元素标记为未使用 – milleniumbug
将元素标记为未使用对我来说不是正确的选项,它会吃掉大量内存。 – kvway
在尝试进行任何更改之前,请确保您**测量性能**。在现代硬件上,它往往需要令人惊讶的大的N来使向量的性能超过其他容器类型。 –