2017-05-16 3 views
1

Hallo Ich möchte wissen, wie man die Karte sortiert, welche Tkey-Variable Pointer-Typ ist. Es gibt getName Funktion, die Char * Typ zurückgeben. also habe ich versucht, mit strcmp zu vergleichen. Aber es gibt einen Fehler im Rückgabeteil.C++ Map Pointer Variablensortierung

struct Compare_P { 
    inline bool operator()(Person const& a, Person const& b) { 
     return (strcmp(a.getName(), b.getName())) < 0; 
    } 
    }; 
    map<Person*, House*, Compare_P>A_List; 
+8

'Compare_P' muss' Operator() 'ein Paar' Person nimmt * 'Zeiger anstelle von (oder zusätzlich to) man nimmt ein Paar von Referenzen. Die Schlüssel in Ihrer Map sind vom Typ 'Person *'; Sie brauchen einen Komparator, der diese Schlüssel vergleichen kann, nicht einen anderen Typ, auch wenn er verwandt ist. –

Antwort

2

Ihre map ‚s Schlüssel ist Person*, aber die Compare_P::operator() nimmt Person const&. Sie können das Problem beheben, indem entweder

definieren
map<Person, House, Compare_P> A_List; 

oder durch einen korrekten Compare_P

struct Compare_P { 
    bool operator()(Person const* a, Person const* b) { 
    return (strcmp(a->getName(), b->getName())) < 0; 
    }