C++ 对结构 vector 的操作

标签 c++ vector find

我收到错误消息“不匹配运算符==in__first。 这是代码:

头文件:

#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() 函数的行似乎产生了错误。它是用于检查 vector 是否已包含特定元素的类算法的函数。我发现这是错误的,因为我尝试在 find 函数中比较 struct 和 string。我可以通过将 url 从 ranking 复制到另一个字符串 vector ,然后在 find 函数中使用该字符串 vector 来处理这个问题,但是当我尝试这样做时,我无法访问“ranking” vector 中的元素——例如 ranking[i] .url 不工作,我不知道为什么..和帮助将不胜感激。

最佳答案

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

你告诉 find 在 [ranking.begin(), ranking.end() 中搜索 rElement.url(类型为 string) )(具有 rankingElements 类型的元素)。当没有明确地给 std::find 一个比较函数时,它会尝试使用 operator== 将元素与搜索到的元素进行比较。因此它尝试调用显然不存在的 operator==(rankingElement, string)。在我看来,实现类似功能的最佳方法是使用接受谓词的 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++ 对结构 vector 的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638341/

相关文章:

vb.net - Flash 电影只在 Chrome 中呈现,而不是 WebBrowser 控件?

linux - 如何 grep/find 文件名列表?

recursion - 递归测试文件夹中的所有flac文件

android - 在android中屏幕旋转时如何保留文本选择状态

c++ - 一元减号运算符如何与 C++ 中的整数文字一起使用?

c++ - 同名变量和常量

c++ - vector 。检查它是否包含 "Key"。 C++

c++ - vector 值不按插入顺序

c++ - unistd read() 不起作用

c++ - Address-of(&) 运算符传递的无效指针