假设我有一个,std::vector<int>并且想知道它是否包含3或将迭代器添加到3。
我不想使用std::set或std::multiset出于任何原因。
我想在std::execution::par_unseq模式下执行此操作。
我看到的两个选项是std::any_of和std::find,但是它们对我来说不太合适。
#include <execution>
#include <functional>
#include <iostream>
#include <vector>
int main()
{
std::vector vec{ 1, 1, 1, 1, 1, 3, 3, 3, 3 };
bool contains{ std::any_of(
std::execution::par_unseq,
vec.begin(), vec.end(),
std::bind(std::equal_to{}, std::placeholders::_1, 3)) };
auto found{ std::find(std::execution::par_unseq, vec.begin(), vec.end(), 3) };
return 0;
}
Run Code Online (Sandbox Code Playgroud)
本std::any_of应该做我想做的,但呼叫是他们做的非常凌乱。范围std::bind_front会有所帮助,但不是很多。
问题std::find在于它必须找到a 的第一次出现3,这限制了它的效率,因为我不在乎3它的发现。
std::any_of按值搜索之外,还有其他选择吗? …