0
votes

Comment trouver une distance minimale avec Lambda

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;
    }
}


1 commentaires

Désolé, STD :: Min_Element fonction dans la bibliothèque d'algorithmes.


3 Réponses :


1
votes

quelque chose comme xxx

Vous pouvez définir la Lambda séparément comme par exemple xxx

alors l'appel de l'algorithme ressemblera à < / p> xxx


0 commentaires

2
votes
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. 

0 commentaires

2
votes

Vous pouvez convertir cela en std :: min_element code> comme ceci: xxx pré>

Notez que cet algorithme (comme la plupart des algorithmes), retournera un 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> xxx pré>

Vous pouvez également obtenir l'index de ce navire (comme vous l'avez dans votre version): P>

int i = std::distance(std::begin(entities), it);


0 commentaires