c++ - 如何在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());
解决方案
您可以通过手工制作的 for 循环或使用std::min_element
lambda 的 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++ 优先级队列按对象的特定方法升序排列