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