não pode compilar no retorno de std :: min_element

votos
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;
}

Desejo para calcular o mínimo no mapa.

Este código não compilar. Eu pensei que a maneira de usar std::min_element's retornou iterador é por referência a ele. Não?

A mensagem de erro na std::coutlinha é operandos inválidos para expressão binária.

Publicado 19/09/2018 em 13:20
fonte usuário
Em outras línguas...                            


2 respostas

votos
7

std::map::iterator::value_type(isto é. o tipo de *it) é std::pair<const double,double>, e não há sobrecarga de padrão operator<<(std::ostream &, std::pair<const double,double>).

Você poderia definir um, ou fazer algo assim std::cout << it->first << ' ' << it->second << std::endl;.

Respondeu 19/09/2018 em 13:23
fonte usuário

votos
4

O tipo de elemento de std::mapum std::pair<const key_type, mapped_type>. *itvai lhe dar uma referência a isso. Não há operador de saída de saída definido para std::pairque o código não compilar.

Você terá que adicionar uma sobrecarga para ele como

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

ou apenas imprimir o que você quer gostar

std::cout << it->first << " " << it->second << "\n";
Respondeu 19/09/2018 em 13:27
fonte usuário

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