例如考慮 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 個元素
uj5u.com熱心網友回復:
最簡單的方法是使用 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 ) )
{
//...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368065.html
