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