使用STL算法合并大量容器

时间:2011-11-08 11:54:27

标签: c++ oop stl

我有很多名为RealAlgebraicNumberPtr的指针到某个类的列表,向量,集合......(你喜欢什么)。它们已经分类。

我想合并它们,当然我想快速有效地完成它。

最佳选择是什么? std::merge?或者也许std::set?我可以同时提供一个<和==订购。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

如上所述,std::merge没问题。

仅对于std :: list,您可以从std::list::merge 成员函数实现的优化中获益:它将列表节点从源拼接到目标中。这样,源列表将变为空,但它将避免资源(重新)分配

回复:std::set

事实上,你可以将std :: merge合并到一个std :: set中,以便一次性获取唯一值。使用泛型合并时,不会过滤重复值,但结果 已排序,因此您可以将std::unique应用于结果。如果您期望有大量重复项,那么使用std::set

可能会更快

答案 1 :(得分:0)

std::merge效率最高。您使用的底层容器取决于您的要求。 std::vector具有所有标准容器的最小内存开销,因此如果您的数据很大,您应该坚持使用它。

如果您使用std::vector,则在合并之前应该resize目标向量以避免重新分配(您应该能够预先计算所需的大小),而不是使用{{1 }}