有没有更好的方式追加到另一个集比遍历每个元素?追加集到另一个集
我有:
set<string> foo ;
set<string> bar ;
.....
for (set<string>::const_iterator p = foo.begin();p != foo.end(); ++p)
bar.insert(*p);
有没有更有效的方式来做到这一点?
有没有更好的方式追加到另一个集比遍历每个元素?追加集到另一个集
我有:
set<string> foo ;
set<string> bar ;
.....
for (set<string>::const_iterator p = foo.begin();p != foo.end(); ++p)
bar.insert(*p);
有没有更有效的方式来做到这一点?
您可以将范围:
bar.insert(foo.begin(), foo.end());
它不是一个更有效率,更少的代码。
bar.insert(foo.begin(), foo.end());
或采取与重复有效交易的联盟。 (如果适用)
set<string> baz ;
set_union(foo.begin(), foo.end(),
bar.begin(), bar.end(),
inserter(baz, baz.begin()));
我不确定'...有效地处理重复项目'是什么意思。你认为'insert'对重复数据没有效率,足以保证使用第三个容器吗? – 2010-04-09 13:32:40
@Charles:好问题。有些情况下,你会想要保留你的套件并且无论如何都需要第三个容器。关于效率:Josuttis说它是线性的(最多2 *(n + m) - 1比较) – 2010-04-09 14:00:02
'set_union'可能是线性的,但插入可能不是。 – UncleBens 2010-04-09 20:51:56
有趣的是C++ 03保证线性时间!因为范围是排序的(它来自另一个'set'),但是相对较新的C++ 0x草案已经删除了这个保证。 – 2010-04-09 12:22:05