我按{{标签,概率},{标签,概率}}的顺序有成对向量。我想得到概率最大的那对。这是我尝试达到的目的,但是它没有获得概率的最大值,而是返回标签字符串的最大值。例如标签狗是最大的值,因为字母顺序。
#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
答案 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和更高版本
答案 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;
}