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;
}
}
Пожалуйста, отредактируйте ваш вопрос, чтобы предоставить [mcve], включая фактическое и желаемое поведение. –
Я не уверен, что вы имеете в виду. Единственная проблема заключается в том, что я не включил сообщение об ошибке, которое я скоро добавлю. – OkIsayHi
Два изолированных фрагмента кода не являются тем, что необходимо для «полного» примера. –