排序矢量矢量

时间:2015-11-25 15:25:47

标签: c++ algorithm c++11 c++14

我有一个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)是最好的复杂性吗?记忆也很重要。

我查看了此解决方案here,但似乎还需要O(n^2)对矢量进行排序?

1 个答案:

答案 0 :(得分:0)

最简单的情况是案例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 - 这应该很简单。

相关问题