查找最大元素的位置


82

是否有一个标准函数返回值数组的max元素的位置(而不是值)?

例如:

假设我有一个像这样的数组:

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

我想要一个返回3的整数的函数,该整数告诉我这sampleArray[3]是数组中的最大值。

Answers:


134

在STL中,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
使用distance()函数的时间复杂度是多少?
Abhipso Ghosh'3

根据文档除非提供的迭代器是a RandomAccessIterator否则它的复杂度呈线性增长,在这种情况下,它的时间是恒定的。无论如何,优化都是在内部为您完成的。
Scorch

28

或者,写成一行:

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

这不适用于数组,该问题建议将其用作要使用的通用结构,因为数组不是类类型,因此它们没有诸如.begin()或.end()之类的成员函数。我认为如果您使用的是最近的编译器,则可以通过使用std :: begin(sampleArray)和std :: end(sampleArray)而不是sampleArray.begin()和sampleArray.end()来修改代码。个人更喜欢接受的答案,因为无论使用哪个版本的C ++都可以运行
Manjia

6

您可以使用max_element()函数查找max元素的位置。

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采用两个定界一个序列的迭代器,并返回指向该序列中最大元素的迭代器。您还可以将谓词传递给定义元素顺序的函数。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.