为STL算法lambda调整std :: pair

Job*_*ick 1 c++ c++11

假设我有std :: pair的STL容器.有没有办法使用boost来调整对的第二个STL算法lambda?

std::vector<std::pair<int, SomeStruct>> vec;
const auto Predicate = [](SomeStruct const& s) { ... };
auto it = std::find_if(vec.begin(), vec.end(), boost-magic(Predicate));
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 6

无需提升.您可以简单地编写一个lambda或一个命名的函数对象:

const auto Predicate2 = [&Predicate](std::pair<int, SomeStruct> const& s) {
    return Predicate(s.second);
};
auto it = std::find_if(vec.begin(), vec.end(), Predicate2);
Run Code Online (Sandbox Code Playgroud)

当然,如果Predicate仅在这种情况下使用过,那么将它写成直接接受一对就更有意义了.