无法在std :: min_element的返回值上进行编译

时间:2018-09-19 13:20:31

标签: c++ c++11

#include <map>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    std::map<double, double> A;

    const auto it = std::min_element(A.begin(), A.end(),
                                [](decltype(A)::value_type& l, decltype(A)::value_type& r) -> bool { return l.second < r.second; });

    std::cout << *it << std::endl;
}

我希望计算地图中的最小值。

此代码无法编译。我认为使用std::min_element返回的迭代器的方法是通过引用它。不?

std::cout行上的错误消息是“二进制表达式的无效操作数”。

2 个答案:

答案 0 :(得分:7)

std::map::iterator::value_type(即*it的类型)为std::pair<const double,double>,并且没有operator<<(std::ostream &, std::pair<const double,double>)的标准重载。

您可以定义一个,也可以执行类似std::cout << it->first << ' ' << it->second << std::endl;的操作。

答案 1 :(得分:4)

std::map的元素类型是std::pair<const key_type, mapped_type>*it将为您提供参考。没有为std::pair定义输出输出运算符,因此代码无法编译。

您将不得不为其添加一个重载

std::ostream& operator <<(std::ostream& os, const std::pair<const double, double>& e)
{
    return os << "{" << e.first << ", " << e.second << "}\n";
}

或仅打印您想要的内容

std::cout << it->first << " " << it->second << "\n";