我想在c ++中将vector
字符串项插入set
字符串中。如果向量的项目包含'+'
,则应将其添加到一个集合中,否则应将其添加到另一个集合中。我可以通过一步一步迭代向量来做到这一点。但是我可以通过“ 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
答案 0 :(得分:15)
您可以按以下方式使用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; }))