Std:: back_inserter для std:: set?

Я думаю, это простой вопрос. Мне нужно сделать что-то вроде этого:

std::set<int> s1, s2;
s1 = getAnExcitingSet();
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());

Конечно, std::back_inserter не работает, так как нет push_back. std::inserter также нужен итератор? Я не использовал std::inserter, поэтому я не уверен, что делать.

Есть ли у кого-нибудь идеи?


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

Ответ 1

set не имеет push_back, потому что положение элемента определяется компаратором множества. Используйте std::inserter и передайте его .begin():

std::set<int> s1, s2;
s1 = getAnExcitingSet();
transform(s1.begin(), s1.end(), 
          std::inserter(s2, s2.begin()), ExcitingUnaryFunctor());

Итератор вставки затем вызовет s2.insert(s2.begin(), x), где x - это значение, переданное итератору при его записи. Набор использует итератор в качестве подсказки, куда вставлять. Вы можете использовать s2.end().