是否有像 std::max_element 这样的算法来计算第二大元素?

fue*_*zig 4 c++ algorithm std max

标准库提供了std::max_element查找可迭代中最大元素的功能,例如:

std::vector<float>::const_iterator max = 
  std::max_element(obj.pt()->begin(), obj.pt()->end());
return std::distance(obj.pt()->begin(), max);
Run Code Online (Sandbox Code Playgroud)

还有什么可以获取第 n 大元素的迭代器吗?

(请注意,max_element返回一个迭代器,这实际上很重要:我不是在寻找值本身,而是在可迭代中寻找第 n 个最大元素的位置。)

小智 6

max_element() 方法可用于通过传递 lambda 函数来获取第二大元素,该函数将元素与先前找到的最大元素进行比较,如果它等于最大元素,则它将简单地跳过该元素。

    auto largest = max_element(vec.begin(), vec.end());
    auto secondLargest = max_element(vec.begin(), vec.end(),
                                     [&largest](unsigned long &a, unsigned long &b) {
                                         if (a == *largest) return true;
                                         if (b == *largest) return false;                                         
                                         return a < b;
                                     });
Run Code Online (Sandbox Code Playgroud)