如果向量为<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.begin( ),鬻());
答案 0 :(得分:2)
您可以通过手工制作的for循环或使用Lambda使用STL std::min_element
来完成。您上面使用它的方式不正确。这是正确的方法:
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
您可以尝试使用此online here,甚至可以尝试一下以了解lambda的工作原理。
std::min_element
对于本机类型将按照您使用它的方式正常工作,但是对于像std::pair
这样的派生类型,其自定义条件是仅选择第二个,您需要通过lambda提供条件。
我建议您阅读C ++ lambda-通常它们非常方便,但是特别是在需要提供像您这样的自定义谓词时!这是另一个示例:C++ priority queue in ascending order by specific method for objects
答案 1 :(得分:1)
您可以使用min_element并使其仅测试第二个元素。
类似的东西:
std::get<1>(*std::min_element(begin(v), end(v), [](auto lhs, auto rhs){return std::get<1>(lhs)<std::get<1>(rhs)}));
我在这里使用get
是因为我不知道您使用的是对还是元组。
由于它仍然是非常小的结构,因此无需通过const&。
答案 2 :(得分:0)
因此,向量看起来像这样:
vector<pair <int, int> > items = { <0,8> <0,3> <1,4> <2,9> <3,5> };
我们需要遍历所有项目以找到最小的第二个项目。为此:
int saveIndex = 0
//now we can loop through all of the items in the vector
for(int i = 1; i < items.size(); i++)
{
if(items[saveIndex].second > items[i].second)
{
saveIndex = i;
}
}
//the smallest second value will be found at
int smallestValue = items[saveIndex].second;