std :: back_inserter для std :: set? - PullRequest
77 голосов
/ 26 мая 2009

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

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 Ответ

115 голосов
/ 26 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...