gpt4 book ai didi

c++ - 将两个参数传递给 remove_if 谓词

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:38:33 25 4
gpt4 key购买 nike

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++ 类(class)的一部分: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);
});

关于c++ - 将两个参数传递给 remove_if 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54593183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com