如何使用 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 ) )
{
//...
}
例如考虑 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 ) )
{
//...
}