繁体   English   中英

使用STL算法合并很多容器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM