C++ 使用std::find()搜索多个元素
是否可以使用C++ 使用std::find()搜索多个元素,c++,vector,find,std,C++,Vector,Find,Std,是否可以使用std::find()通过一个调用搜索多个元素?示例:std::find(vector.begin()、vector.end()、0&&1&&D) 谢谢他们说得很清楚: “在与val比较的范围内,第一个元素的迭代器。 如果没有匹配的元素,函数将返回last 因此,您不能只使用一个函数调用。您不能使用std::find。假设0&&1&&D是一个包含三个值的列表,并且您试图在向量中找到一个包含这些值的元素,您可以使用: 使用谓词(lambda可能最简单,例如[](const T&x){
std::find()
通过一个调用搜索多个元素?示例:std::find(vector.begin()、vector.end()、0&&1&&D)
谢谢他们说得很清楚:
“在与val
比较的范围内,第一个元素的迭代器。
如果没有匹配的元素,函数将返回last
因此,您不能只使用一个函数调用。您不能使用
std::find
。假设0&&1&&D
是一个包含三个值的列表,并且您试图在向量中找到一个包含这些值的元素,您可以使用:
- 使用谓词(lambda可能最简单,例如
,其中[](const T&x){return x==0 | | | x==1 | | x==d;}
是T
向量所持有的任何类型),或
- (链接页面有一个很好的例子)
- 可能适合你
std::for_each(vector.begin(),
vector.end(),
[](auto& item) -> void {if (item == <xxx> ) { /* Use the item */ });
如果您需要这三个值相邻,那么自己实现
find()
可能是最简单的选择:
模板
迭代器通过三个值(迭代器优先、迭代器最后、T值1、T值2、T值3)查找
{
for(;first!=last;++first){
如果(*first==value1
&&第一个+1!=最后一个&&*(第一个+1)=值2
&&第一个+2!=最后一个&&*(第一个+2)=值3){
先返回;
}
}
最后返回;
}
这可能是一个单独的问题,但如果存在某些元素,是否有一种方法可以用于在向量中搜索?或者我必须递归地去做吗?也许我想检查一下Tony D的答案:)不完全正确,但很接近。我想做的是找出我的向量是否包含所有这些元素,即向量[0]==1
,向量[1]==0
,向量[2]==D
。不一定要在这些精确的位置,但是假设一个大小为i的向量。同样,它们也不必相邻。然后,您可以将1、0、D值放入第二个向量中,并在其上设置一个for
循环,依次调用第一个向量中的find
。如果第二个向量比第一个向量小得多,那么缓存友好性可能会降低,但我没有理由认为您的程序的性能关键部分中有足够的数据使其成为一个实际问题。如果您决定避免这种情况,可以使用find\u first\u of
,每次找到匹配项时,从正在查找的值集中删除匹配元素,直到它为空(成功)或点击end
。您能解释一下第三个参数吗?[](自动项)->bool{return item==l})
做什么?这是一个lambda函数。有关更多详细信息,请参阅。
bool found = std::any_of(vector.begin(),
vector.end(),
[](auto& item) -> bool { return item == <xxx>; });