当前位置: 首页 > news >正文

STL 算法库中的 min_element 和 max_element

在 C++ STL中,min_elementmax_element 是两个非常实用的算法函数,用于快速找到容器或范围内的最小值和最大值,这里以min为例。

头文件<algorithm>
语法

template <class ForwardIterator>
ForwardIterator min_element(ForwardIterator first, ForwardIterator last);template <class ForwardIterator, class Compare>
ForwardIterator min_element(ForwardIterator first, ForwardIterator last, Compare comp);

参数

  • firstlast:定义要搜索的范围 [first, last)
  • comp(可选):自定义比较函数,用于指定排序规则。

时间复杂度为 O ( n ) O(n) O(n),其中 n n n 是范围 [first, last) 中的元素数量。空间复杂度为 O ( 1 ) O(1) O(1),因为只使用常量级别的额外空间。


基本用法

如何使用 min_elementmax_element 找到数组中的最小值和最大值。

#include <iostream>
#include <vector>
#include <algorithm> using namespace std;int main() {vector<int> nums = {4, 2, 9, 1, 7, 3};auto min_it = min_element(nums.begin(), nums.end());auto max_it = max_element(nums.begin(), nums.end());if (min_it != nums.end()) {cout << "Min: " << *min_it << endl;}if (max_it != nums.end()) {cout << "Max: " << *max_it << endl;}return 0;
}
Min: 1
Max: 9

自定义比较函数

按绝对值大小来寻找最小值。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath> using namespace std;int main() {vector<int> nums = {-4, 2, -9, 1, 7, -3};auto min_it = min_element(nums.begin(), nums.end(), [](int a, int b) {return abs(a) < abs(b);});if (min_it != nums.end()) {cout << "Min value by absolute value: " << *min_it << endl;}return 0;
}
Min value by absolute value: 1

同时查找最小值和最大值

如果需要同时查找最小值和最大值,可以结合 minmax_element 使用(这是 min_elementmax_element 的扩展版本)。

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main() {vector<int> nums = {4, 2, 9, 1, 7, 3};auto [min_it, max_it] = minmax_element(nums.begin(), nums.end());if (min_it != nums.end() && max_it != nums.end()) {cout << "Minimum value: " << *min_it << endl;cout << "Maximum value: " << *max_it << endl;}return 0;
}

输出

Minimum value: 1
Maximum value: 9

容器为空的情况

如果范围 [first, last) 为空,则 min_elementmax_element 返回 last。因此,在使用返回值之前,应检查容器是否为空。

if (!nums.empty()) {auto min_it = min_element(nums.begin(), nums.end());cout << "Min: " << *min_it << endl;
}

自定义cmp

自定义比较函数必须满足严格弱序(strict weak ordering)。简单来说,如果 cmp(a, b) 为真,则 a 应小于 b。如果 cmp(a, b)cmp(b, a) 都为假,则 ab 相等。

http://www.xdnf.cn/news/203455.html

相关文章:

  • AI日报 - 2025年04月29日
  • JAVA:线程池
  • 弹性盒子布局
  • 嘉黎县传统手工艺传承与发展交流会圆满举行
  • 【LInux网络】网络层IP协议全面解析
  • 亚马逊低价商城战略全解析:跨境卖家突围价格战的7维作战体系
  • 鸿蒙应用开发 知识点 官网快速定位表
  • 鉴权方案与 Sa-Token(元宝胡编乱造中)
  • 【LaTex】8.2 段落格式
  • 关于codeforces设置中文 以及 插件安装后没显示中文的问题解决
  • 【MQ篇】RabbitMQ之惰性队列!
  • Java——构造方法
  • 数据结构算法竞赛训练网站OJ(Online Judge)
  • el-dialog弹窗关闭时调了两次刷新数据的接口
  • KBEngine 源代码分析(二):协议注册和处理
  • Vue 生命周期钩子总结
  • 【前缀和 差分数组 数论】P6042 「ACOI2020」学园祭|省选-
  • 【DeepSeek认证】最好的MODBUS调试工具
  • 什么是数据链路层的CRC检测以及为什么要放到帧尾?
  • 民办生从零学C的第十二天:指针(1)
  • 探秘Transformer系列之(31)--- Medusa
  • MySQL的数据类型
  • 从灰色地带走向阳光监管的漏洞产业
  • 运维实施27-Linux权限管理
  • 有源医疗器械的安规三项
  • 2025“钉耙编程”中国大学生算法设计春季联赛(8)10031007
  • sql学习笔记(四)
  • Java方法执行机制与入口点实现深度解析
  • 跨平台数据采集方案:淘宝 API 对接 React Native 实现移动端实时监控
  • docker镜像构建常用参数