使用vector和struct

时间:2018-03-31 21:30:51

标签: c++ algorithm vector struct

此代码中的错误是什么:

    #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct symtab{
  string name;
  string location;
};
vector<symtab> symtab_details;

bool search_symtab(string s){

  if (find (symtab_details.begin(), symtab_details.end(), s)!=symtab_details.end()) return true;
  return false;
}


int main() {

    bool get = search_symtab("ADD");
    return 0;
}

我收到以下错误:

  

usr / include / c ++ / 4.8.2 / bits / stl_algo.h:166:17:错误:'operator =='不匹配(操作数类型为'symtab'和'const std :: basic_string')       if(* __ first == __val)

2 个答案:

答案 0 :(得分:8)

您正试图在std::string中找到"ADD"std::vector<symtab>。当然这不起作用。

您需要的是std::find_if

auto it = std::find_if(symtab_details.begin(),
                       symtab_details.end(),
                       [&s](symtab const& item) { return item.name == s; });
return  (it != symtab_details.end());

答案 1 :(得分:3)

代码正在搜索与symtab类型的对象匹配的std::string类型的对象。因此,您必须提供一个比较运算符来判断特定symtab对象是否等于特定的std::string对象。你需要

bool operator==(const symtab&, const std::string&);

如果您仔细阅读了错误消息,那就是它告诉您的内容。