【问题标题】:How do I find the smallest number vector with repeated numbers?如何找到具有重复数字的最小数字向量?
【发布时间】:2021-08-03 20:51:09
【问题描述】:

我有这个带有这些数字{0, 1, 0, 3, 2, 3} 的向量,我正在尝试使用这种方法来获得最小数字及其索引:

int min_num = *min_element(nums.begin(), nums.end());
int min_num_idx = min_element(nums.begin(), nums.end()) - nums.begin();

但是,这将返回它找到的第一个最小数字,即索引0 中的0。有没有办法让它返回最后一个最小的数字? (而不是索引2 中的0

【问题讨论】:

标签: c++ vector


【解决方案1】:

但是,这会返回它找到的第一个最小数字,因此索引 0 中的 0。有没有办法让它返回最后一个最小的数字? (索引 2 中的 0 代替)

你可以试试std::vector<int>::reverse_iterator:

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

int main() {
    std::vector<int> n { 0, 1, 0, 3, 2, 3 };
    std::vector<int>::reverse_iterator found_it = std::min_element(n.rbegin(), n.rend());
    if (found_it != n.rend()) {
        std::cout << "Minimum element: " << *found_it << std::endl;
        std::cout << "Minimum element index: " << std::distance(n.begin(), std::next(found_it).base()) << std::endl;
    }
}

输出:

最小元素:0

最小元素索引:2

【讨论】:

  • auto found_it = ...
  • @bolov 我明确提到它是为了证明在这种情况下std::min_element() 返回的类型是std::vector&lt;int&gt;::reverse_iterator 而不是std::vector&lt;int&gt;::iterator。但是,当然可以让编译器自动推断出 auto 的类型。
  • 很公平,这很有道理。
【解决方案2】:
int min_num_idx = nums.size() - 1 - min_element(nums.rbegin(), nums.rend()) - nums.rbegin();

【讨论】:

    猜你喜欢
    • 2020-05-18
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多