#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
行上的错误消息是“二进制表达式的无效操作数”。
答案 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";