최대 요소의 위치 찾기


82

값 배열의 최대 요소 위치 (값 아님)를 반환하는 표준 함수가 있습니까?

예를 들면 :

다음과 같은 배열이 있다고 가정합니다.

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

sampleArray[3]배열에서 가장 큰 값 을 알려주는 정수 3을 반환하는 함수를 원합니다 .

답변:


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

문서 에 따르면 제공된 반복자가 a가 아닌 경우 복잡성은 선형 적으로 확장되며이 경우RandomAccessIterator 시간이 일정합니다. 어쨌든 최적화는 내부적으로 수행됩니다.
Scorch

28

또는 한 줄로 작성 :

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

이것은 배열과 함께 작동하지 않습니다.이 질문은 사용할 일반 구조로 제안합니다. 배열은 클래스 유형이 아니므로 .begin () 또는 .end ()와 같은 멤버 함수가 없기 때문입니다. 충분히 최근의 컴파일러를 사용하는 경우 sampleArray.begin () 및 sampleArray.end () 대신 std :: begin (sampleArray) 및 std :: end (sampleArray)를 사용하여 코드를 조정할 수 있다고 생각합니다. 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시퀀스를 구분하는 두 개의 반복기를 취하고 해당 시퀀스의 최대 요소를 가리키는 반복기를 리턴합니다. 요소의 순서를 정의하는 함수에 조건자를 추가로 전달할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.