将两个参数传递给remove_if谓词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将两个参数传递给remove_if谓词相关的知识,希望对你有一定的参考价值。

void Print (vector<pair<int, string>> v) {
    for(auto& p : v) {
        auto[_int, _str] = Unpack(p);
        cout << p.first << " " << p.second << endl;
    }

}

int main()
{
    vector<pair<int, string>> v = {{1,"b"}, {2, "z"}, {1, "a"}};

    Print(v);
    /* 
    1 b 
    2 z
    1 a 
    */

    auto predicate = [](const int _int, const string _str) {

        return _int != 1 || _str == "b";

    };

    auto it = remove_if(begin(v), end(v), predicate);
    v.erase(it, end(v));

    Print(v);
    /* I want:a
    1 a
    */

}

所以这是Yandex的C ++课程的一部分:coursera link

谓词是预先定义的,我不能改变它。这是一个带有2个参数的lambda函数。一切都表明我应该使用这个谓词作为remove_if函数的一部分。

如何将两个参数传递给谓词?

我试过了:

auto it = remove_if(begin(v), end(v), predicate(auto[_int, _str] = Unpack(p)));

但它不起作用......任何想法?提前致谢!

答案

@someprogrammerdude给了我一个想法(实际上它在我的脑海里,但我不能“形成”它:

“使用第二个lambda采用单个参数,并调用第一个lambda?使用std :: bind设置其中一个参数?”

所以我只是使用了一个额外的lambda来解压缩参数然后将它放在谓词中:

auto it = remove_if(begin(v), end(v), [predicate](pair<int, string> p) {
    return predicate(p.first, p.second);
});

以上是关于将两个参数传递给remove_if谓词的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给 XML 布局中定义的片段

如何使用底部导航视图和 Android 导航组件将参数传递给片段?

如何将两个参数传递给 Pool.starmap()?

在phantom.js中同步page.evaluate

Android - 如何将自定义对象传递给片段

如何将百万美元html中的多个参数传递给百里香方言处理器