我想将 aview::filter
应用于一个向量,以便找到它与另一个向量的 set_intersection(或 set_difference 等)。
我这样做的兴趣在于它允许您更改原始容器的特定子集(并且还可以节省一些附带的复制std::set_intersection
)。
这或多或少是我想要做的:
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> set1 = { 1, 2, 3, 4, 5, 6 },
set2 = { 4, 5, 6, 7, 8, 9 };
auto intersection = set1 | std::views::filter([&set2](int n)
{ return std::find(set2.cbegin(), set2.cend(), n) != set2.cend(); });
for (int& v : intersection)
v *= 2;
for (auto v : set1)
std::cout << v << " "; // prints 1 2 3 8 10 12
}
然而,这段代码看起来非常低效,因为它会多次迭代 set2。ranges
图书馆有没有更好的方法来实现这一点?