2016-12-10 8 views
-4

probLabel enthält eine Bezeichnung und eine Nummer dafür. Ich versuche, die größte Zahl in probLabel zu bekommen und das Etikett zurückzugeben. Also benutze ich max_element und habe eine Prädikatfunktion geschrieben.Was ist falsch an meiner Methode, ein Prädikat zu implementieren?

bool vectPairMax(const pair<string, int> &lhs, const pair<string, int> &rhs) { 
if (lhs.second < rhs.second) { 
    return true; 
} else { 
    return false; 
} 
} 

Ist das ein Funktor oder ein Funktionszeiger, den ich schreibe? In beiden Fällen sehe ich nicht, wie es falsch ist. Vielleicht, wenn es ein Funktionszeiger ist, muss ich es dereferenzieren? Irgendwelche Vorschläge im Allgemeinen wäre sehr

geschätzt

Dies ist die Fehlermeldung:

undefinierte Symbole für Architektur x86_64: „ProbCalc (DataAllFive &, std :: __ 1 :: map, std :: __ 1 :: allocator >, std :: __ 1 :: basic_string, std :: __ 1 :: Zuweiser>, std :: __ 1 :: kleiner, std :: __ 1 :: Zuweiser>>, std :: __ 1 :: Zuweiser, std :: __ 1: : allocator> const, std :: __ 1 :: basic_string, std :: __ 1 :: Zuweiser>>>> &, std :: __ 1 :: menge, std :: __ 1 :: allokator>, std :: __ 1 :: less , std :: __ 1 :: Zuweiser>>, std :: __ 1 :: Zuweiser, std :: __ 1 :: Zuweiser>>>) ", referenziert von: PredictionTest (csvstream &, DataAllFive &) in main.o ld: Symbol (e) nicht für die Architektur x86_64 Klirren gefunden: Fehler: Linker Befehl fehlgeschlagen mit Exit-Code 1 (Verwendung -v Aufruf sehen)

komplettem Condensed-Code

string ProbCalc(Data &trainData, map<string, string> &tempMap2, set<string> &uniqueWords) { 
    vector<pair<string, int> > probLabel; // Vector of pairs of labels and their probability.  
    // Iterate through all known posts in training data 
    for (auto foo : trainData.postNum) { 
     probLabel.push_back(make_pair(foo, 0)); 
    } 
    // Label 
    string mostProbPost = max_element(probLabel.begin(), probLabel.end(), vectPairMax)->first; 

    return mostProbPost; 
} 


// Predicate for max_element function 
bool vectPairMax(const pair<string, int> &lhs, const pair<string, int> &rhs) { 
    if (lhs.second < rhs.second) { 
    return true; 
    } else { 
    return false; 
    } 
} 
+2

Bitte bearbeiten Sie Ihre Frage zu einem [MCVE] einschließlich der tatsächlichen und das gewünschte Verhalten. –

+0

Ich bin mir nicht sicher, was du meinst. Das einzige Problem ist, dass ich die Fehlermeldung nicht eingefügt habe, die ich in Kürze hinzufügen werde. – OkIsayHi

+1

Zwei isolierte Codefragmente sind nicht überall, was für ein "vollständiges" Beispiel benötigt wird. –

Antwort

1

Es ist nichts falsch mit dem Prädikat. Dies kompiliert gut:

Verwandte Themen