我收到错误消息“操作符== in__首先不匹配。
这是代码:

头文件:

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>

using namespace std;

struct rankingElement {
   string url;
   int rank;
};

class RankingCreator {
public:
   static const int MAX_QUERY_SIZE = 20;
   RankingCreator();
   virtual ~RankingCreator();
   bool checkPageRank(rankingElement rElement, vector<rankingElement> ranking);
   void insertIntoRanking(rankingElement rElement);
};


和源文件:

#include "RankingCreator.h"

bool RankingCreator::checkPageRank(rankingElement rElement,
                                   vector<rankingElement> ranking)
{
   if (ranking.size() < MAX_QUERY_SIZE) {
      // enough space for another page in ranking
      return true;
   } else {
      if (find(ranking.begin(), ranking.end(), rElement.url) != ranking.end()) {
         // url is already in ranking
         return false;
      } else {

      }
   }
   return true;
}


我尝试注释源文件中的某些代码块,而find()函数的行似乎会生成错误。它是来自类算法的函数,用于检查向量是否已包含某些元素。我发现这是错误的,因为我尝试在find函数中将struct与string进行比较。我可以通过将网址从排名复制到另一个字符串向量,然后在find函数中使用该字符串向量来解决此问题,但是当我尝试这样做时,我无法访问“排名”向量中的元素-例如rank [i] .url不起作用,我也不知道为什么..并且帮助将不胜感激。

最佳答案

find(ranking.begin(), ranking.end(), rElement.url)


您告诉find在rElement.url(元素类型为string)中搜索[ranking.begin(), ranking.end())(类型为rankingElements)。当未明确给出std::find比较功能时,它将尝试使用operator==将元素与搜索到的元素进行比较。因此,它尝试调用显然不存在的operator==(rankingElement, string)。 Imo进行类似工作的最佳方法是使用find_if接受谓词:

struct functor  {
    string url;
    functor(const string& str):url(str){}
    bool operator()(const rankingElement& val) { return val.url == this->url; }
};
...
if(find_if(ranking.begin(), ranking.end(), functor(rElement.url)) != ranking.end() )


否则,您可以编写operator==

bool operator==(const rankingElement& elem, const string& url)
{ return elem.url == url; }


这将与find

关于c++ - struct vector 的C++运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8638341/

10-09 06:23
查看更多