c++ - 我可以在一行代码中将符合条件的 vector 的所有元素插入到集合中吗

标签 c++ c++11 stl stdvector stdset

我有一个元素 vector 。我想使用该 vector 中符合特定条件的元素来填充一个集合。我可以用一行或比下面更简洁的任何方式来做到这一点吗?

// given vector<int> v

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

例如,类似以下内容:

// given vector<int> v

set<int> s;
s.insert(v.filter(/* lambda here*/));

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

最佳答案

您可以使用 std::copy_iflambdastd::inserter将值插入到集合中。看起来像

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

关于c++ - 我可以在一行代码中将符合条件的 vector 的所有元素插入到集合中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49777525/

相关文章:

c++ - 如何在 Linux 中从动态库(libsample.so)生成导入库(libsample.a)

c++ - 这是变量还是函数

c++ - 是否可以将枚举的默认类型设置为无符号字符?

c++ - std::is_convertible 是协变的还是逆变的?

c++ - std::sort 函数给出 "Bus error: 10"

c++ - cout 覆盖了我的一些指针

c++ tgamma() 函数有不同的输出

c++ - <mutex> 和 <condition_variable> 的异常处理

c++ - std::vector 重新分配其内存数组时,使用的是复制构造函数还是移动构造函数?

c++ - 在 C++ 中反转集合的内容