如何在 std::vector 中找到 std::pair 第二个元素的最大值?

gam*_*n67 4 c++ vector std-pair

我有这样的对向量 {{label,probability},{label,probability}}。我想得到具有最大概率值的对。这是我尝试实现的目标,但不是获取概率的最大值,而是返回标签字符串的最大值。例如,由于字母顺序,标签狗是最大值。

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
    std::vector<std::pair<std::string, float>> pairs;
    pairs = {{"apple",34.785}, {"banana",67.8467}, {"dog", 13.476}, {"cat",56.486}};

    const auto p = max_element(pairs.begin(), pairs.end());
    auto label = p->first;
    auto prob = p->second;

    std::cout<<label<<" "<<prob;
}
Run Code Online (Sandbox Code Playgroud)

输出 : dog 13.476

son*_*yao 5

您需要提供一个定制的比较器max_element,例如

max_element(pairs.begin(), 
            pairs.end(), 
            [](const auto& lhs, const auto& rhs) { return lhs.second < rhs.second; });
Run Code Online (Sandbox Code Playgroud)

否则,std::max_element将使用operator<ofstd::pair作为比较器,它将检查 的两个元素std::pair

注意:适用于 C++14 及更高版本

居住