为什么在这种情况下不能使用C ++ 17结构化绑定?
std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
答案 0 :(得分:2)
结构化绑定仅适用于初始化程序。您需要具有可以绑定到的特定对象。您的lambda进行闭包操作,该闭包将被一对地图的不同实例调用。可以使用结构化绑定的位置位于lambda主体内-您可以参考一对。
std::find_if( m.cbegin(), m.cend(), []( const auto & p ){
const auto& [x,y] = p;
return x == y;
});