首页 > 解决方案 > 当具有相同值的多个值是 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 保持距离。

谢谢。

标签: c++stlstd

解决方案


您可以为 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<>());

这里的例子


推荐阅读