C++ "select"算法

标签 c++ algorithm vector lambda

std::algorithm 中找到的功能中,我似乎找不到我能想到的最基本的功能之一:选择集合的一个子集(例如,返回所有奇数数字,所有状态 == 'employed' 的员工,所有价格低于 20 美元的元素)。

所以,给定一个整数列表

vector<int> ints {1, 9, 3, 27, 5, 19, 3, 8, 2, 12};

vector<int> evens = ?
vector<int> greaterThan7 = ?

如何求偶数和大于7的数?

最佳答案

如果您想要更实用的东西,可以查看 boost range 库。具体来说,filtered :

for (int i : ints | filtered([](int i){return i > 7;}))
{
    ...
}

这为您提供了一个惰性 View ,无需构建新容器。


您可以从 Eric Niebler 的 range-v3 获得相同的信息:

for (int i : view::filter(ints, [](int i){return i > 7;})
{
    ...
}

好处是您也可以将其分配给一个 vector (因此您可以选择它是懒惰的还是急切的,这是 Boost.Ranges 不允许的)。

std::vector<int> greaterThan7 = view::filter(ints, [](int i){return i > 7;});
std::vector<int> sameThing    = ints | view::filter([](int i){return i > 7;});

关于C++ "select"算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656020/

相关文章:

c++ - C++中的 vector 迭代器

c++ - Boost 是否因为不像 Boost 那样有罪?

c++ - 使用 CMake 创建库、安装它并链接到另一个项目的正确方法

c++ - 令人困惑的输出

javascript - 以编程方式遍历色轮并访问十六进制值或 rgb

c++ - 如何获取 vector 中元素的类型?

c++ - 判断三角形的原点是否在三角形内部

algorithm - 序列总和 : 1^1 + 2^2 + 3^3 + . .. + n^n (mod m)

algorithm - 第二个for循环的时间复杂度是多少?

c++ - SFML Vector2 用法