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