有沒有更好的方式追加到另一個集比遍歷每個元素?追加集到另一個集
我有:
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