我的实现谓词的方法有什么问题?

时间:2016-12-10 19:19:15

标签: c++

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;
   }
}

1 个答案:

答案 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;

}