2

将两个大的已经排序QVector的 's 连接到一个大的 sorted中的最佳(最快)方法是QVector什么?

我有以下代码:

class Square
{
    .....
    qint32 id; //public
    .....
}

QVector <Square> v_one; //size 10000+
QVector <Square> v_two; //size 10000+

我已经v_one并且v_two已经按“ id”排序。

如何通过排序将这两个向量快速合并为其中之一(例如) 。v_one = v_one + v_twoid

我认为我必须将其作为一个动作(排序和合并)来执行,而不是一个接一个?

谢谢!

4

1 回答 1

3

如果您想将它们合并到两个向量之一中,我建议std::inplace_merge

auto size_one = v_one.size();
v_one += v_two;
std::inplace_merge(v_one.begin(), v_one.begin() + size_one, v_one.end(), 
  [](Square const &a, Square const &b) -> bool
  { return a.id < b.id; });

对于并行执行:用于并行的实验性C++ 扩展,ISO/IEC TS 19570:2015std::experimental::parallel::inplace_merge可能在未来某个时候成为标准的一部分。您可以在CodePlex Parallel STL 项目中找到并行合并算法的实现,该项目是 Parallelism Extension 的 Microsoft 原型。


编辑:

删除重复项可以使用std::unique.

auto new_end = std::unique(v_one.begin(), v_one.end(), 
  [](Square const &a, Square const &b) -> bool
  { return a.id == b.id; });
v_one.erase(new_end, v_one.end());
于 2016-02-09T06:34:37.043 回答