Std::max_element用于复杂元素(operator= issue)

std::max_element on complex elements (operator= issue)

本文关键字:operator issue 元素 复杂 max element 用于 Std      更新时间:2023-10-16

我试图找到复双精度向量的最大元素(基于复双精度的实分量)。代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <complex>
using namespace std;
int main()
{
    vector<complex<double> > rts;
    for (int i = -1; i<5; i++)
        rts.push_back(complex<double>(i,0));
    complex<double> d;
    d = std::max_element(rts.begin(), rts.end(), [](complex<double> const & lhs, complex<double> const & rhs) {return lhs.real() < rhs.real();});
    return 0;
}

得到的错误是

不匹配' operator= '(操作数类型为' std::complex '和' __gnu_cxx::__normal_iterator*, std::vector>> ')|

谁能帮我弄明白是什么问题?

谢谢!

函数max_element返回一个迭代器,您需要取消引用它:

d = *std::max_element(rts.begin(), rts.end(), [](complex<double> const & lhs, complex<double> const & rhs) {return lhs.real() < rhs.real();});

注意:如果这是在实际代码中使用的,你首先要确保你的范围不是空的,否则你将解引用一个无效的迭代器。