[英]Merging a lot of containers with STL Algorithms
我有很多列表,向量,集合...(无论您喜欢使用什么)指向某些类的称为RealAlgebraicNumberPtr
的指针。 它们已排序。
我想合并它们,当然我想快速高效地做到这一点。
最佳选择是什么? std::merge
吗? 或者也许std::set
? 我可以同时提供<和==排序。
有任何想法吗?
如前所述, std::merge
可以。
仅对于std :: list,您可以从std::list::merge
成员函数实现的优化中受益:它将列表节点从源拼接到目标。 这样,源列表将变为空,但是它将避免资源(重新)分配
std::set
实际上,您可以将std :::合并到std :: set中,以一次性获得唯一的值。 使用通用合并,不会过滤重复的值,但是会对结果进行排序,因此您可以将std::unique
应用于结果。 如果您期望重复很多,则使用std::set
可能会更快
std::merge
效率很高。 您使用哪个基础容器取决于您的要求。 std::vector
具有所有标准容器中最小的内存开销,因此,如果您的数据很大,则应坚持这样做。
如果使用std::vector
,则应在合并之前resize
目标向量的resize
,以避免重新分配(您应该能够预先计算所需的大小),而不要使用std::back_inserter
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.