Добавить набор к другому набору

Есть ли лучший способ добавления набора к другому набору, чем итерация через каждый элемент?

У меня есть:

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

.....

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

Есть ли более эффективный способ сделать это?

Ответ 1

Вы можете вставить диапазон:

bar.insert(foo.begin(), foo.end());

Ответ 2

Это не более эффективный, но меньший код.

bar.insert(foo.begin(), foo.end());

Или возьмите союз, который эффективно работает с дубликатами. (если применимо)

set<string> baz ;

set_union(foo.begin(), foo.end(),
      bar.begin(), bar.end(),
      inserter(baz, baz.begin()));