将set设置为另一组

mr.*_*bio 50 c++ insert set

是否有更好的方法将集合附加到另一个集合而不是迭代每个元素?

我有 :

set<string> foo ;
set<string> bar ;

.....

for (set<string>::const_iterator p = foo.begin( );p != foo.end( ); ++p)
    bar.insert(*p);
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点?

CB *_*ley 92

您可以插入范围:

bar.insert(foo.begin(), foo.end());
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是C++ 03保证线性时间!?因为范围是排序的(它来自另一个`set`),但是相对较新的C++ 0x草案已经删除了这个保证. (3认同)

Edd*_*onk 10

它不是更有效但代码更少.

bar.insert(foo.begin(), foo.end());
Run Code Online (Sandbox Code Playgroud)

或者采取有效处理重复的工会.(如适用)

set<string> baz ;

set_union(foo.begin(), foo.end(),
      bar.begin(), bar.end(),
      inserter(baz, baz.begin()));
Run Code Online (Sandbox Code Playgroud)

  • `set_union`可能是线性的,但插入器可能不是. (2认同)