I have this vector:
using namespace std;
vector< pair<short, string> > vec = {};
And I want to find out if exists a pair <a, b>
with b == X
.
I know about std::find
from <algorithm>
but don't know how to apply it here.
Should I write my own function to do that?
bool is_in_vec(X)
{
for (auto& e : vec)
if (e.second == X)
return true;
return false;
}
Is that efficient?
Your solution looks fine if you only want to know if there is an element satisfying your criteria present. I would use const
references in the loop, because the loop should not change the elements of the vector:
for (const auto& e : vec) ....
If you want to use a standard library algorithm, you can try 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; });
Here, it
is an iterator to the first element satisfying the condition, or equal to vec.end()
if no element is found.