如何显示vector<myStruct>的最大元素?

How to display maximum element of vector<myStruct>?

我有一个源代码,内容如下:

#include <iostream> 
#include <algorithm> 
#include <vector>
using namespace std; 

struct st
{
    int id;
    double d;
}; 

bool comp(int a, int b) 
{ 
    return (a < b); 
} 

bool comp2(st &a, st& b) { return a.d < b.d; }

int main() 
{
    vector<int> v = { 9, 4, 7, 2, 5, 15, 11, 12, 1, 3, 6 };
    vector<st> vec = {{1, 5.6},{2, 5.7},{3, 4.3}};

    auto max = std::max_element(v.begin(), v.end(), comp);
    cout << "Max element of v: " << *max; // It's working

    auto max2 = std::max_element(vec.begin(), vec.end(), comp2);
    cout << "Max element of vec: " << *max2; // It's not working

    return 0; 
}

当我尝试显示向量的最大值时 vec 我得到以下错误:

[Error] cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&'

问题的可能解决方案是什么?

您没有为 struct st 类型的对象定义运算符 <<。所以编译器会针对这条语句报错

cout << "Max element of vec: " << *max2;

你可以这样写

cout << "Max element of vec: " << max2->id << ", " << max2->d << '\n';

或者您为 struct st 类型的对象冷定义运算符 << 类似于

std::ostream & operator <<( std::ostream &os, const st &obj )
{
    return os << "( " << obj.id << ", " << obj.d << " )";
}