c++ - 当具有相同值的多个值是 std::vector 的一部分时,std::distance 的计算如何工作
问题描述
vector<int> arr;
max = *max_element(begin(arr), end(arr));
min = *min_element(begin(arr), end(arr));
auto it = find(arr.begin(), arr.end(), max);
auto it2 = find(arr.begin(), arr.end(), min);
dis1 = distance(arr.begin(), it);
dis2 = distance(arr.begin(), it2);
我想在向量中找到最大值和最小值的索引,所以我使用迭代器并使用距离方法来计算值。
这适用于某些输入,但我遇到了一个有两个最小值的输入。
Input : 10 10 58 31 63 40 76
所以这里 10 是最小值,但有 2 个10's
,但我希望从最后一次出现的 10 而不是第一次计算出的距离。
我可以通过保存一个变量并在 for 循环中的每次迭代检查最小值来轻松做到这一点。
但是,我想知道我是否可以以std:: distance
某种方式操作程序将与最后一次出现的 10 保持距离。
谢谢。
解决方案
您可以为 std::max_element 和 std::min_element 提供自定义比较运算符。使用 std::less_equal 而不是默认的 std::less 可以让您获得最后一次出现而不是第一次出现:
auto it = max_element(begin(arr), end(arr), std::less_equal<>());
auto it2 = min_element(begin(arr), end(arr), std::less_equal<>());
这里的例子
推荐阅读
- kubernetes - ConfigMap 卷未与密钥一起安装为卷
- google-ads-api - 为什么我在 Google Ads 中尝试创建新的转化操作时收到“当前客户不允许操作”?
- .htaccess - 如何更改 .htaccess 以接受阿拉伯语?
- javascript - 来自非活动选项卡中视频元素的 CanvasRenderingContext2D drawImage
- go - 指针接收器与值的方法,值和指针之间的转换
- java - 不清楚 driver.getWindowHandles() 和 driver.getWindowHandle()
- python - Pandas 从在 python 中具有多个值的单元格创建新行
- flutter - 我如何更改图标按钮中的图标
- python - 没有名为“服务”的模块
- python - SSHTunnelForwarder 和 dbeaver 中的 SSH 公钥身份验证失败