在一个大排序的QVector
中连接两个已经排序的QVector
的最佳(最快)方法是什么?
我有以下代码:
class Square
{
.....
qint32 id; //public
.....
}
QVector <Square> v_one; //size 10000+
QVector <Square> v_two; //size 10000+
v_one
和v_two
已经按"id
“排序了。
如何通过id
.对这两个向量进行快速合并成其中一个(例如v_one = v_one + v_two
)
我认为我必须这样做,作为一个动作(排序和合并),而不是一个接一个?
谢谢!
发布于 2016-02-09 06:34:37
如果您想将它们合并到两个向量中的一个,我建议使用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 19570:2015有std::experimental::parallel::inplace_merge
,这很可能在将来的某个时候成为标准的一部分。您可以在并行合并算法的实现中找到CodePlex并行STL项目,这是并行扩展的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());
https://stackoverflow.com/questions/35285108
复制相似问题