अधिकतम तत्व की स्थिति का पता लगाना


83

क्या कोई मानक फ़ंक्शन है जो मानों की एक सरणी के अधिकतम तत्व की स्थिति (मूल्य नहीं) लौटाता है?

उदाहरण के लिए:

मान लीजिए कि मेरे पास एक सरणी है:

sampleArray = [1, 5, 2, 9, 4, 6, 3]

मैं एक फ़ंक्शन चाहता हूं जो 3 का पूर्णांक लौटाता है जो मुझे बताता है कि sampleArray[3]सरणी में सबसे बड़ा मूल्य है।

जवाबों:


136

एसटीएल में, std::max_elementपुनरावृत्त प्रदान करता है (जिसका उपयोग सूचकांक प्राप्त करने के लिए किया जा सकता है std::distance, यदि आप वास्तव में चाहते हैं)।

int main(int argc, char** argv) {
  int A[4] = {0, 2, 3, 1};
  const int N = sizeof(A) / sizeof(int);

  cout << "Index of max element: "
       << distance(A, max_element(A, A + N))
       << endl;

  return 0;
}

5
फ़ंक्शन दूरी () का उपयोग करने की समय जटिलता क्या है?
अबीपो घोष

डॉक्स के अनुसार , यह जटिलता रेखीय रूप से तब तक होती है जब तक कि प्रदान करनेवाला ए नहीं होता है RandomAccessIterator, जिस स्थिति में यह समय में स्थिर होता है। किसी भी मामले में, अनुकूलन आपके लिए आंतरिक रूप से किया जाता है।
स्कॉरच

30

या, एक पंक्ति में लिखा गया है:

std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));

यह सरणियों के साथ काम नहीं करता है, जो प्रश्न का उपयोग करने के लिए जेनेरिक संरचना के रूप में पता चलता है, क्योंकि सरणियाँ वर्ग प्रकार नहीं हैं और इसलिए उनके पास कोई सदस्य कार्य नहीं हैं जैसे कि .begin () या .end ()। मुझे लगता है कि आप नमूना कोड का उपयोग करके अपने कोड को अनुकूलित कर सकते हैं :: start (sampleArray) और std :: end (sampleArray) के बजाय sampleArray.begin () और sampleArray.end () यदि आप एक कंप्रेशर का उपयोग कर रहे हैं, तो मैं हाल ही में पर्याप्त हूं, हालांकि व्यक्तिगत रूप से स्वीकृत उत्तर को प्राथमिकता दें क्योंकि यह बिना किसी बात के चलेगा कि C ++ के किस संस्करण का उपयोग किया जाता है
मंज़िया

6

आप max_element()अधिकतम तत्व की स्थिति का पता लगाने के लिए फ़ंक्शन का उपयोग कर सकते हैं ।

int main()
{
    int num, arr[10];
    int x, y, a, b;

    cin >> num;

    for (int i = 0; i < num; i++)
    {
        cin >> arr[i];
    }

    cout << "Max element Index: " << max_element(arr, arr + num) - arr;

    return 0;
}

0

std::max_elementएक क्रम में परिसीमन करने वाले दो पुनरावृत्तियों को लेता है और उस क्रम में अधिकतम तत्व की ओर इशारा करते हुए एक पुनरावृत्ति देता है। आप अतिरिक्त रूप से फ़ंक्शन के लिए एक विधेय पास कर सकते हैं जो तत्वों के आदेश को परिभाषित करता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.