我有很多名为RealAlgebraicNumberPtr
的指针到某个类的列表,向量,集合......(你喜欢什么)。它们已经分类。
我想合并它们,当然我想快速有效地完成它。
最佳选择是什么? std::merge
?或者也许std::set
?我可以同时提供一个<和==订购。
有什么想法吗?
答案 0 :(得分:4)
如上所述,std::merge
没问题。
仅对于std :: list,您可以从std::list::merge
成员函数实现的优化中获益:它将列表节点从源拼接到目标中。这样,源列表将变为空,但它将避免资源(重新)分配
std::set
std::unique
应用于结果。如果您期望有大量重复项,那么使用std::set
可能会更快
答案 1 :(得分:0)
std::merge
效率最高。您使用的底层容器取决于您的要求。 std::vector
具有所有标准容器的最小内存开销,因此如果您的数据很大,您应该坚持使用它。
如果您使用std::vector
,则在合并之前应该resize
目标向量以避免重新分配(您应该能够预先计算所需的大小),而不是使用{{1 }}