我有这样的结构。

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));
哪里
elementInfostd::vector< struct MaxWinPerElementInfo >paytablestd::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/

10-11 15:55