tgy*_*tgy 6 c++ algorithm search coding-efficiency c++11
我有这个向量:
using namespace std;
vector< pair<short, string> > vec = {};
Run Code Online (Sandbox Code Playgroud)
我想找出是否存在对<a, b>带b == X.
我知道std::find从<algorithm>,但不知道如何在这里使用它.
我应该写自己的功能吗?
bool is_in_vec(X)
{
for (auto& e : vec)
if (e.second == X)
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
这有效吗?
jua*_*nza 10
如果您只想知道是否存在满足您的标准的元素,那么您的解决方案看起来很好.我会const在循环中使用引用,因为循环不应该更改向量的元素:
for (const auto& e : vec) ....
Run Code Online (Sandbox Code Playgroud)
如果要使用标准库算法,可以尝试std::find_if:
const std::string X{"foobar"};
auto it = std::find_if(vec.begin(),
vec.end(),
[&X](const pair<short, string>& p)
{ return p.second == X; });
Run Code Online (Sandbox Code Playgroud)
这里,it是满足条件的第一个元素的迭代器,或者等于vec.end()没有找到元素的迭代器.
在 C++11 中,您还可以使用std::any_of
std::string X{"foobar"};
return std::any_of(vec.begin(), vec.end(),
[&X](const pair<short, string>& p)
{ return p.second == X; });
Run Code Online (Sandbox Code Playgroud)