#include #include #include double distance(math::csignal v1, math::csignal v2, int n){ if (v1.size() != v2.size()) { throw std::runtime_error("les deux vecteurs doivent être de même longueur"); }; int m = v1.size(); double d; double di; for (int i = 0 ; i v){ int arg = 0; int max = v[0]; int n = v.size(); for(int i = 1; i < n ; ++i){ if (v[i]>max){ arg = i; max = v[i]; }; }; return arg }; int main(math::csignal new_vect, map< math::csignal, std::string > dico, int k){ double d; vector< std::pair > k_min; int avance = 0; int arret = 0; int droite = 0; int gauche = 0; int rejet = 0; vector vchoix; for(auto& ref_vect : dico){ d = distance(new_vect, ref_vect.first ); if (k_min.size() < k ){ k_min.push_back({d, ref_vect.first}); } else if (d < k_min[k-1].first){ k_min.push_back({d, ref_vect.first}); sort(k_min.begin(), k_min.end()); k_min.pop_back(); }; } ; for(auto i = k_min.begin(); i != k_min.end(); i++) { if (dico[k_min[i].second].second == "avance"){ avance = avance + 1 } else if (dico[k_min[i].second].second == "arret"){ arret = arret + 1 } else if (dico[k_min[i].second].second == "droite"){ arret = droite + 1 } else if (dico[k_min[i].second].second == "gauche"){ arret = gauche + 1 } else if (dico[k_min[i].second].second == "rejet"){ arret = rejet + 1 } }; vchoix.push_back(avance); vchoix.push_back(arret); vchoix.push_back(droite); vchoix.push_back(gauche); vchoix.push_back(rejet); int nchoix = argmax(vchoix); string choix ; if (nchoix == 0){ choix = "avance" } else if (nchoix == 1){ choix = "arret" } else if (nchoix == 2){ choix = "droite" } else if (nchoix == 3){ choix = "gauche" } else if (nchoix == 4){ choix = "rejet" } };