मैं C12+ std::vector<double>
में न्यूनतम मान के अनुक्रमणिका ढूंढना चाहता हूं। यहाँ इस बात का कुछ हद तक एक वर्बोज़ कार्यान्वयन है:सी ++ में वेक्टर <double> के लिए ArgMin?
//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;
}
(। मुझे पता है अगर आप उपरोक्त कार्यान्वयन में कोई गलती नोटिस करते हैं मैं इसे परीक्षण किया है, लेकिन अपनी परीक्षण बिल्कुल संपूर्ण नहीं है।)
मुझे लगता है कि कार्यान्वयन के ऊपर शायद एक व्हील-पुनर्विचार है; यदि संभव हो तो मैं अंतर्निर्मित कोड का उपयोग करना चाहता हूं। क्या इसके लिए एसटीएल फ़ंक्शन में एक-लाइन कॉल है? या, क्या कोई अधिक संक्षिप्त कार्यान्वयन का सुझाव दे सकता है?
'std :: min_element'" सभी मिनटों को वापस नहीं करता "। यह सीमा में सबसे छोटे तत्व के लिए एक पुनरावर्तक देता है। यदि न्यूनतम कई बार होता है तो इटेटरेटर पहले को इंगित करता है। आपके 'मिनट [0]' शायद '* mins' होना चाहिए क्योंकि यह एक पुनरावर्तक है, परिणाम की सरणी नहीं। – Blastfurnace