我有一个排序的矢量, 什么是更好的: 使用lower_bound并将元素插入向量中的位置。 或者只是将元素push_back转换为vector,并在sort()?
需要时对其进行排序答案 0 :(得分:1)
对于执行一次的单个操作,使用lower_bound
和insert
会更便宜。 lower_bound
为O(log(n))
,insert
为(最差和平均情况)O(n)
,最终复杂度为O(n)
。
如果您在插入之前不需要对矢量进行排序,那么仅排序一次会更便宜,因为所有push_back
都是O(1)*O(n) = O(n)
并且最终排序为O(n*log(n))
,最终复杂度为O(n*log(n))
,而多个lower_bound
+ insert
会使您的复杂度为O(n)*O(n) = O(n**2)
。
如果您需要在整个插入过程中排序的元素,哪一个更便宜将在很大程度上取决于您的使用模式(您需要多长时间以及何时需要对元素进行排序)。通常情况下,您只需要在构造过程结束时排序的元素,这就是为什么最后的排序可以是工具带中非常强大的工具。如果这不是您的使用模式,您可能希望至少考虑使用关联容器,例如multi_set
或multi_map
。