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

时间:2019-06-25 01:38:40

标签: c++ vector std-pair

我按{{标签,概率},{标签,概率}}的顺序有成对向量。我想得到概率最大的那对。这是我尝试达到的目的,但是它没有获得概率的最大值,而是返回标签字符串的最大值。例如标签狗是最大的值,因为字母顺序。

#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;
}

输出:dog 13.476

2 个答案:

答案 0 :(得分:2)

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

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

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

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

LIVE

答案 1 :(得分:1)

您可以通过自定义比较器功能来做到这一点。

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

bool compare(std::pair<std::string, float> p1, std::pair<std::string, float> p2) {
    return p1.second<p2.second;
}

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(), compare);
    auto label = p->first;
    auto prob = p->second;

    std::cout<<label<<" "<<prob;
}