如何使用 find_if 在给定的成对向量中查找元素

how to use find_if to find element in given vector of pairs

例如考虑 vector<pair<string,int>>

它包含:

ABC 1
BCD 2
CDE 3
XHZ 4

string s;
cin>>s;
if(find_if(vec.begin(),vec.begin()+3,cmp)!=vec.begin()+3) // I want to check only first 3 values  

我需要 cmp 使用 find_if

来查找给定的字符串是否存在

编辑:
如何使用比较器 (cmp) 传递字符串 s 并且向量将始终包含至少 3 个元素

最简单的方法是使用 lambda 表达式。例如

#include <string>
#include <utility>
#include <vector>
#include <iterator>
#include <algorithm>

//...

std::string s;
std::cin >> s; 

auto cmp = [&s]( const auto &p ) { return p.first == s; }; 

if ( std::find_if( std::begin( vec ), std::next( std::begin( vec ), 3 ), cmp ) != std::next( std::begin( vec ), 3 ) )
{
    //...
}

另一种方法是在 main 之前创建一个函数对象,例如

class cmp
{
public:
    cmp( const std::string &s ) : s( s )
    {
    }

    bool operator() ( const std::pair<std::string, int> &p ) const
    {
        return p.first == s;
    }

private:
    const std::string &s;
};


//...
if ( std::find_if( std::begin( vec ), std::next( std::begin( vec ), 3 ), cmp( s ) ) != std::next( std::begin( vec ), 3 ) )
{
    //...
}