Не удается собрать по возвращении StD :: min_element в

голоса
2
#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«s возвращаемый итератор на него ссылаются. Нет?

Сообщение об ошибке на std::coutлинии «недействительные операнды бинарного выражения».

Задан 19/09/2018 в 13:20
источник пользователем
На других языках...                            


2 ответов

голоса
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;.

Ответил 19/09/2018 в 13:23
источник пользователем

голоса
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";
Ответил 19/09/2018 в 13:27
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more