首页 > 解决方案 > 如何在c ++中找到对向量中的最小元素?

问题描述

如果向量是 <0,8> <0,3> <1,4> <2,9> <3,5>

假设仅考虑对值的第二个键需要找到最小值,这里它将是 3。

输出:sample.cpp:在函数“int main()”中:sample.cpp:24:45:错误:在初始化 int i1=*std::min_element(v.开始(),v.end());

标签: c++

解决方案


您可以通过手工制作的 for 循环或使用std::min_elementlambda 的 STL 来完成。你上面使用的方式是不正确的。这是正确的方法:

auto v = std::vector<std::pair<int,int>>{{0,8},{0,3},{1,4},{2,9},{3,5}};
auto result = *std::min_element(v.cbegin(), v.cend(), [](const auto& lhs, const auto& rhs) {
        return lhs.second < rhs.second;    
    });
std::cout << result.first << " " << result.second  << std::endl; // 0 3

您可以在此处在线尝试此操作,或许可以修改以了解 lambda 的工作原理。
std::min_element将以您使用它的方式对本机类型正常工作,但对于std::pair仅选择第二个的自定义条件的派生类型,您需要通过 lambda 提供标准。
我建议阅读 C++ lambdas - 它们通常非常方便,但特别是在需要提供自定义谓词时,例如您的情况!这是另一个示例:C++ 优先级队列按对象的特定方法升序排列


推荐阅读