我有这样的结构。
struct MaxWinPerElementInfo
{
std::string paytableName;
std::string elementName;
long long elementCredits;
bool multiplierRequired;
};
我想找到与
paytableName
匹配的元素。为此,我计划将std::find_if
与谓词功能一起使用。我在
struct MaxWinPerElementInfo
中将函数对象声明为bool operator() ( const MaxWinPerElementInfo &elementInfo ) const
{
return paytableName == elementInfo.paytableName;
}
现在,我尝试通过调用来搜索元素,
std::find_if( elementInfo.begin(), elementInfo.end(), MaxWinPerElementInfo( paytable));
哪里
elementInfo
是std::vector< struct MaxWinPerElementInfo >
,paytable
是std::string
。为此,我得到了错误,
no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const MaxWinPerElementInfo&’
我不能使用c++ 11,因为这是旧版代码。
我在这里想念的是什么?任何建议都会很有帮助。
最佳答案
std::find_if( elementInfo.begin(), elementInfo.end(),
MaxWinPerElementInfo( paytable));
您正在尝试通过传递字符串来构造
MaxWinPerElementInfo
。您是否有接受字符串的构造函数?我想不是,因此编译器尝试调用采用const MaxWinPerElementInfo
引用的副本构造函数。如果未定义带有单个参数的构造函数,则编译器将还原为它知道的唯一一个:复制构造函数。由于您有一个结构且成员是公共(public)的,因此建议您在类外部使用functor对象实现此功能。
struct MaxWinPerElementInfoPayTablePredicate
{
MaxWinPerElementInfoPayTablePredicate(const std::string& _paytableName) :
paytableName(_paytableName) {}
bool operator() ( const MaxWinPerElementInfo &elementInfo ) const
{
return paytableName == elementInfo.paytableName;
}
std::string paytableName;
}
然后这样称呼它:
std::find_if( elementInfo.begin(), elementInfo.end(),
MaxWinPerElementInfoPayTablePredicate(paytable) );
关于c++ - 在find_if中使用谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22660448/