对矢量的矢量进行排序

Sort vector of vector

本文关键字:排序      更新时间:2023-10-16

我有一个int向量的向量,如下所示:

std::vector<std::vector<int>> vec_vec{{3,5,1,6},{2,4},...};

结果应该是

 Case1:   {{1, 2, 3, 4}, {5, 6}} 
 Case2:  {1,2,3,4,5,6}
 Case3:  {{1, 3, 5, 6}, {2, 4}} 

我找到了很多方法来做到这一点,我发现最好的方法需要复杂性O(n^2)来对它们进行排序。

case1case2case3的最佳复杂度是多少?

那么,编写本机(c++11,c++14)跨平台代码对向量进行排序的最佳方法是什么呢?O(n^2)是最好的复杂度吗?记忆力也很重要。

我在这里检查了这个解决方案,但似乎也需要O(n^2)来对向量进行排序?

最简单的情况是情况2。要解决这个问题,请创建一个临时的新向量,将所有元素移动到那里,并对新向量进行排序。

std::vector<int> temp;
for (const auto& vec: vec_vec)
{
    std::copy(vec.begin(), vec.end(), std::back_inserter(temp));
}
std::sort(temp.begin(), temp.end());

复制部分是O(n);排序部分是O(n-log(n))。

要实现案例1,请将元素从temp复制回vec_vec——这应该很容易。