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 70

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().