J'ai deux classes entité code> et
expédié code>.
Le navire code> est hérité de
entité code>. Ils ont
x code> et
y code> sous forme d'attributs qui représente la position de la position 2D.
SQUARED_DISTANCE CODE> La fonction renvoie la distance entre un navire et une entité. P>
int min_distance = 10000000;
int index;
for (int i = 0; i < entities.size(); ++i)
{
int curr_distance = squared_distance(entities[i], ship);
if (curr_distance < min_distance)
{
min_distance = curr_distance;
index = i;
}
}
3 Réponses :
quelque chose comme Vous pouvez définir la Lambda séparément comme par exemple p> alors l'appel de l'algorithme ressemblera à < / p>
int squared_distance(const Entity& e, const Ship& s) { return pow((e.x - s.x), 2) + pow((e.y - s.y), 2); } std::min_element(std::begin(entities), std::end(entities), [&ship](const Entity& a, const Entity& b) { return squared_distance(a, ship) < squared_distance(b, ship); }); Note you need to update parameters in your squared_distance declaration.
Vous pouvez convertir cela en Notez que cet algorithme (comme la plupart des algorithmes), retournera un Vous pouvez également obtenir l'index de ce navire (comme vous l'avez dans votre version): P> std :: min_element code> comme ceci:
itérateur code> au navire le plus proche. Vous pouvez obtenir le navire le plus proche par la déséroférience de cet itérateur: p>
int i = std::distance(std::begin(entities), it);
Désolé, STD :: Min_Element fonction dans la bibliothèque d'algorithmes.