我可以在一行代码中插入一个匹配条件的向量的所有元素

nap*_*con 4 c++ stl stdvector stdset c++11

我有一个元素的向量.我想使用匹配特定条件的此向量元素填充集合.我可以使用一行,或以比下面更简洁的方式执行此操作吗?

// given vector<int> v

set<int> s;
for (const int& i : v)
{
    if (/* some condition on i*/)
        s.insert(i);
}
Run Code Online (Sandbox Code Playgroud)

例如,以下内容:

// given vector<int> v

set<int> s;
s.insert(v.filter(/* lambda here*/));
Run Code Online (Sandbox Code Playgroud)

不言而喻,出于性能原因,v.filter方法应返回迭代器,而不是单独的填充向量.

Nat*_*ica 10

您可以使用std::copy_if一个拉姆达std::inserter对值插入到该集合.看起来像

std::copy_if(v.begin(), v.end(), std::inserter(s, s.begin()), [](auto val) { return val == some_condition; });
Run Code Online (Sandbox Code Playgroud)