2016-12-10 3 views
-4
vector<pair<string, long> > probLabel; 
max_element(probLabel.begin(), probLabel.end(), vectPairMax)->first 

probLabel содержит ярлык и номер для него. Я пытаюсь получить наибольшее число в probLabel и вернуть ярлык. Поэтому я использую max_element и написал функцию предиката.Что не так с моим методом реализации предиката?

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

Является ли это функтором или указателем функции, который я пишу? В любом случае я не вижу, как это неправильно. Возможно, если это указатель на функцию, мне нужно разыменовать его? Любые предложения в целом было бы весьма признателен

Это сообщение об ошибке:

неопределенные символы для архитектуры x86_64: «ProbCalc (DataAllFive &, станд :: __ 1 :: Карта, станд :: __ 1 :: распределителем >, std :: __ 1 :: basic_string, std :: __ 1 :: allocator>, std :: __ 1 :: less, std :: __ 1 :: allocator>>, std :: __ 1 :: allocator, std :: __ 1: : allocator> const, std :: __ 1 :: basic_string, std :: __ 1 :: allocator>>>> &, std :: __ 1 :: set, std :: __ 1 :: allocator>, std :: __ 1 :: less , std :: __ 1 :: allocator>>, std :: __ 1 :: allocator, std :: __ 1 :: allocator>>>) ", ссылка от: PredictionTest (csvstream &, DataAllFive &) в main.o л.д.: символ (ы) не найдено для архитектуры x86_64 лязг: ошибка: команда линкера потерпела неудачу с кодом выхода 1 (используйте опцию -v, чтобы вызов)

Полный конденсированного кодекс

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

Пожалуйста, отредактируйте ваш вопрос, чтобы предоставить [mcve], включая фактическое и желаемое поведение. –

+0

Я не уверен, что вы имеете в виду. Единственная проблема заключается в том, что я не включил сообщение об ошибке, которое я скоро добавлю. – OkIsayHi

+1

Два изолированных фрагмента кода не являются тем, что необходимо для «полного» примера. –

ответ

1

В предикате нет ничего плохого. Это компилирует штраф:

#include <vector> 
#include <utility> 
#include <string> 
#include <algorithm> 

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

int main() 
{ 
    std::vector<std::pair<std::string, int> > probLabel; 
    std::string mostProbPost = max_element(probLabel.begin(), probLabel.end(), vectPairMax)->first; 

} 
Смежные вопросы