Quiero encontrar el punto, que tiene la menor coordenada Y (si hay más de tales puntos, encuentre el que tenga X más pequeña). Al escribir con lambda:lambda return bool
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
if (p1.first->y() < p2.first->y())
return true;
else if (p1.first->y() > p2.first->y())
return false;
else
return p1.first->x() < p2.first->x();
}
que estoy recibiendo:
error C3499: a lambda that has been specified to have a void return type cannot return a value
¿cuál es la diferencia entre:
// works
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
return p1.first->y() < p2.first->y();
}
y
// does not work
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
if (p1.first->y() < p2.first->y())
return true;
else
return false;
}
La construcción 'if (expresión) devuelve true; else return false; 'es fundamentalmente feo. El doble de feo si la expresión es realmente booleana. –
@ MichaelKrelin-hacker: Es cierto, pero eso es _no_ por qué el compilador rechaza el último ejemplo. – MSalters
MSalters, seguro, es por eso que comento y no respondo. Esta es la respuesta a la pregunta "¿cuál es la diferencia". Y esta es la principal diferencia;) –