Эквивалент Python Difference_update в C ++?

s1 и s2 являются наборами (набор Python или C ++ std :: set)
Чтобы добавить элементы s2 в s1 (установить объединение), вы можете сделать

Python: s1.update(s2)

C++: s1.insert(s2.begin(), s2.end());

Чтобы удалить элементы s2 из s1 (установить разницу), вы можете сделать

Python: s1.difference_update(s2)

Что является эквивалентом этого в C ++? Код

s1.erase(s2.begin(), s2.end());

не работает, поскольку s1.erase () требует итераторов от s1. Код

std::set<T> s3;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), std::inserter(s3, s3.end());
s1.swap(s3);

работает, но кажется слишком сложным, по крайней мере, по сравнению с Python.

Есть ли способ попроще?

7
задан S.L. Barth - Reinstate Monica 18 July 2012 в 21:01
поделиться