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的未定义符号: &#34; ProbCalc(DataAllFive&amp;,std :: __ 1 :: map,std :: __ 1 :: allocator&gt;,std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;,std :: __ 1: :less,std :: __ 1 :: allocator&gt;&gt ;,std :: __ 1 :: allocator,std :: __ 1 :: allocator&gt; const,std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt ;&gt;&gt;&gt;&amp;,std :: __ 1 :: set,std :: __ 1 :: allocator&gt;,std :: __ 1 :: less,std :: __ 1 :: allocator&gt;&gt;,std: :__ 1 :: allocator,std :: __ 1 :: allocator&gt;&gt;&gt;)&#34;,引自: main.o中的PredictionTest(csvstream&amp;,DataAllFive&amp;) ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为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;
}
}
答案 0 :(得分: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;
}