是否有任何内置函数告诉我我的向量是否包含某个元素,例如
std::vector<string> v;
v.push_back("abc");
v.push_back("xyz");
if (v.contains("abc")) // I am looking for one such feature, is there any
// such function or i need to loop through whole vector?
您可以std::find
按如下方式使用:
if (std::find(v.begin(), v.end(), "abc") != v.end())
{
// Element in vector.
}
为了能够使用std::find
:include <algorithm>
。
如果您的容器仅包含唯一值,请考虑std::set
改用。它允许查询具有对数复杂度的集合成员。
std::set<std::string> s;
s.insert("abc");
s.insert("xyz");
if (s.find("abc") != s.end()) { ...
如果您的向量保持排序,请使用std::binary_search
,它也提供对数复杂度。
如果一切都失败了,则回退到std::find
,这是一个简单的线性搜索。
在 C++11 中,您可以std::any_of
改用。
查找数组中是否有任何零的示例:
std::array<int,3> foo = {0,1,-1};
if ( std::any_of(foo.begin(), foo.end(), [](int i){return i==0;}) )
std::cout << "zero found...";
它在<algorithm>
并被调用std::find
。