QtConcurrent::map和QtConcurrent::filter区别是什么,感觉差不多
时间: 2024-09-30 22:00:25 浏览: 37
`QtConcurrent::map` 和 `QtConcurrent::filter` 都是 Qt 并发库提供的工具函数,用于处理并行计算,但它们的作用和用法有所不同。
`QtConcurrent::map` 函数主要用于对集合中的每个元素应用一个函数,并将结果保存到一个新的列表中。它接受一个函数、一个数据源(如列表)和一个额外的容器来接收结果。例如,如果你有一个整数列表,你可以用 `map` 来同时计算每个元素的平方:
```cpp
QFuture<int> futureSquares = QtConcurrent::mapped(QList<int>{1, 2, 3, 4}, squareFunction);
```
这里 `squareFunction` 是一个接受一个整数并返回其平方的函数。
而 `QtConcurrent::filter` 则用于从输入集合中选择满足特定条件的元素。它接受一个测试函数和一个数据源,只保留那些函数返回值为 `true` 的元素。比如筛选出列表中所有的偶数:
```cpp
QFuture<QList<int>> futureEvens = QtConcurrent::filtered(QList<int>{1, 2, 3, 4, 5}, isEven);
```
`isEven` 是一个判断某个数字是否为偶数的函数。
总结来说,`map` 主要是操作转换(Apply a function to each element),而 `filter` 是基于条件的选择(Select elements based on a condition)。两者结合可以实现复杂的并发操作。
阅读全文