インデックスの最小値は、C++ std::vector<double>
です。ここでは、こののやや冗長な実装です:ベクトルのArgMin <double> C++?
//find index of smallest value in the vector
int argMin(std::vector<double> vec)
{
std::vector<double>::iterator mins = std::min_element(vec.begin(), vec.end()); //returns all mins
double min = mins[0]; //select the zeroth min if multiple mins exist
for(int i=0; i < vec.size(); i++)
{
//Note: could use fabs((min - vec[i]) < 0.01) if worried about floating-point precision
if(vec[i] == min)
return i;
}
return -1;
}
(私はそれをテストし、あなたが上記の実装で間違いに気づいた場合、私に教えてください、私のテストが全く完全ではありません。。)
私は思いますおそらくホイールリニューアルです。可能であれば、組み込みコードを使用したいと思います。このためのSTL関数への1行の呼び出しはありますか?あるいは、誰かがより簡潔な実装を提案することができますか?
'std :: min_element'は「すべての分を返す」ではありません。範囲内の最小の要素にイテレータを返します。最小値が複数回発生する場合、イテレータは最初の点を指します。あなたの 'mins [0]'は結果の配列ではなく、反復子であるため、おそらく '* mins'でなければなりません。 – Blastfurnace