首页 > 解决方案 > 获取数组中最大值的索引

问题描述

我需要获取数组中最大值的索引。类似的东西std::max_element。但是,如果有多个具有相同最大值的条目,我需要获取所有索引,而不仅仅是第一个。我该怎么做,使用 STL?

标签: c++stl

解决方案


当然,您可以使用它std::max_element来完成最初的工作,但对于其余的工作,您可能需要使用std::find或类似的东西。可能看起来像这样:

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
  const auto vec = std::vector<int>({1, 2, 3, 2, 3, 0, 3, 2});
  
  // Part 1: Find the maximum.
  const auto max = std::max_element(vec.begin(), vec.end());
  if (max == vec.end())
  {
    // Not required here, but in the general case an empty vector could occur.
    std::cout << "Vector is empty." << std::endl;
    return 0;
  }
  std::cout << "Maximum is " << *max << "." << std::endl;

  // Part 2: Find all indices of elements equal to the maximum.
  auto iterator = std::find(vec.begin(), vec.end(), *max);
  while (iterator != vec.end())
  {
    std::cout << "found maximum at index " << std::distance(vec.begin(), iterator)
              << std::endl;
    ++iterator;
    iterator = std::find(iterator, vec.end(), *max);
  }
  return 0;
}

在这种情况下,输出将是:

Maximum is 3.
found maximum at index 2
found maximum at index 4
found maximum at index 6

如果您的容器始终具有相同数量的元素,您也可以使用std::array而不是。std::vector


推荐阅读