Вставка элементов вектора для установки - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу вставить элементы строки vector в строку set в c ++.Если элемент вектора содержит '+', его следует добавить в один набор, иначе он должен быть добавлен в другой набор.Я могу сделать это, повторяя вектор один за другим.Но могу ли я сделать это с помощью функции callback функции insert функции set?

struct compare {
    bool operator() (const std::string& str) const{
        if(str.find("+") != std::string::npos) {
            return false;
        return true;
    }
};
std::vector strlist = {"apple","+apple","banana","orange","+graphes"};
std::set<std::string,compare> set1,set2;
set1.insert(strlist.begin(),strlist.end(),compare);

Я хочу создать список set1 с элементами,

apple,
banana,
orange

и set2 с элементами,

+apple
+graphes

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете использовать std::partition_copy следующим образом:

std::partition_copy(strlist.begin(), strlist.end(),
                    std::inserter(set1, set1.end()),
                    std::inserter(set2, set2.end()),
                    [](const std::string& str) { return str.find("+") != std::string::npos; }))
...