查找向量是否包含第二个元素等于X的对

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()没有找到元素的迭代器.


Dan*_*ügt 3

在 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)