我收到错误消息“操作符== 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/