首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连接两个大型QVector并排序的最快方法(C++/Qt)

连接两个大型QVector并排序的最快方法(C++/Qt)
EN

Stack Overflow用户
提问于 2016-02-09 06:12:15
回答 1查看 2.6K关注 0票数 2

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

我有以下代码:

代码语言:javascript
运行
复制
class Square
{
    .....
    qint32 id; //public
    .....
}

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

v_onev_two已经按"id“排序了。

如何通过id.对这两个向量进行快速合并成其中一个(例如v_one = v_one + v_two)

我认为我必须这样做,作为一个动作(排序和合并),而不是一个接一个?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 06:34:37

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

代码语言:javascript
运行
复制
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 19570:2015std::experimental::parallel::inplace_merge,这很可能在将来的某个时候成为标准的一部分。您可以在并行合并算法的实现中找到CodePlex并行STL项目,这是并行扩展的Microsoft。

编辑:

使用std::unique可以实现删除重复项。

代码语言:javascript
运行
复制
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());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35285108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档