Kan ikke kompilere på std :: min_element avkastning

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

Jeg ønsker å beregne minimum i kartet.

Denne koden ikke klarte å kompilere. Jeg trodde måten å bruke std::min_element's returnert iterator er ved å referere til det. Nei?

Feilmeldingen på std::coutlinjen er ugyldige operander til binære uttrykk.

Publisert på 19/09/2018 klokken 13:20
kilden bruker
På andre språk...                            


2 svar

stemmer
7

std::map::iterator::value_type(ie. type *it) er std::pair<const double,double>, og det er ingen standard overbelastning av operator<<(std::ostream &, std::pair<const double,double>).

Du kan enten definere en, eller gjøre noe sånt std::cout << it->first << ' ' << it->second << std::endl;.

Svarte 19/09/2018 kl. 13:23
kilden bruker

stemmer
4

Elementet type std::maper en std::pair<const key_type, mapped_type>. *itvil gi deg en referanse til det. Det er ingen utgang utgang operatør definert for std::pairså koden ikke kompilere.

Du vil enten nødt til å legge til en overbelastning for det som

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

eller bare skrive hva du vil like

std::cout << it->first << " " << it->second << "\n";
Svarte 19/09/2018 kl. 13:27
kilden bruker

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