用<向量中的擦除元素复杂性

时间:2016-03-28 12:57:36

标签: c++ algorithm

我需要从排序向量中擦除元素,同时限制等于或大于n的复杂度。我知道$('.workspace > span').find('div').last().remove(); 方法将删除它,但它的复杂性是n。我可以用最后一个元素重写那个结构元素,然后使用popback删除最后一个应该是常量的方法,但问题是它不会保持排序,所以我不得不再次排序。是否有可能解决这个问题并保持低于复杂性?

2 个答案:

答案 0 :(得分:3)

由于您需要对其进行排序,因此std::vector中没有解决方案(据我所知)。但是,std::vector似乎不适合您的案例。 std::list是您的唯一选择(可能会更好)。

来自此参考:http://www.cplusplus.com/reference/list/list/erase/

  

复杂性

     

擦除(破坏)元素数量的线性。

这意味着它会将析构函数调用N次,其中N是要删除的项目数。因此,删除项目的数量是线性的(不是std::list项目计数)

答案 1 :(得分:3)

如果你必须对你的数据结构进行排序,并且能够从中间以高性能擦除元素,那么最好用另一个容器替换vector(例如set,multiset)吗?