繁体   English   中英

搜索结构向量

[英]Search vector of structs

我试图在结构向量中找到一个字符串。 但是我一直收到错误消息,错误消息太长,所以我将其上传到外部。 它的一部分是

“错误:'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";
}

https://pastebin.com/mk0pTWgr

这不是在做你认为的那样。 这是一个 for 循环,它迭代一个constants向量并尝试在每个单独的constants对象的lastname中进行搜索。 我认为你不是故意这样做的。 您可以简单地将lastnamesearchTerm进行比较,如下所示:

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进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM