我正在尝试在结构向量中找到一个字符串。但是我一直收到错误消息,错误消息太长了,因此我将其上传到外部。一部分是
“错误:'operator =='不匹配(操作数类型为'char'和'const std :: __ cxx11 :: basic_string') {return * __ it == _M_value; }“
我当前使用的代码是:
struct constants {
std::string name, lastname;
float salary=0;
};
void searchPerson(const std::vector<constants> &search) {
using namespace std;
vector<constants>name;
string searchTerm;
cout << "Enter last name of the person you wish you lookup." << "\n";
cin >> searchTerm;
for (size_t k=0; k<name.size(); k++){
if (std::find(name[k].lastname.begin(), name[k].lastname.end(), searchTerm) != name[k].lastname.end())
{
cout << "Test" << "\n";
}
}
}
我似乎无法正常工作,我不知道怎么了。最终目标是让用户输入一个人的姓氏,如果程序中存储了一个具有该姓氏的人,它将打印有关该人的所有信息(名字,姓氏和薪水)。我可能还会使用相同的搜索技术从程序中删除一个人。
我只需使用for循环就可以轻松地使它正常工作,但是绝对有理由使用find语法,下面的代码片段令人惊奇。
for (size_t i=0; i<name.size(); i++) {
if (name[i].lastname== searchTerm)
cout << "Test" << "\n";
}
答案 0 :(得分:1)
这不是您想的那样。这是一个for循环,它迭代constants
的向量,并尝试在每个lastname
对象的constants
中进行搜索。我认为您不是要这样做。您可以像这样简单地将lastname
与searchTerm
进行比较:
for (size_t k = 0; k < name.size(); k++) {
if (name[k].lastname == searchTerm)
{
std::cout << "Test" << "\n";
break;
}
}
但是,最好使用std::vector
之类的stl集合来避免手工制作的for循环。您可以使用std::find
,但这将在结构中使用operator ==
。您要么必须提供,要么可以使用std::find_if
并提供谓词函数来进行比较:
if (std::find_if(name.cbegin(), name.cend(),
[&searchTerm](const constants& c) { return searchTerm == c.lastname; }) != name.end())
{
std::cout << "Test" << "\n";
}
这将避免使用for循环。请注意,lambda函数是谓词,它通过引用捕获searchTerm
并将其仅与lastname
进行比较。