C ++通过结构数组搜索值

C++ Search value through array of struct

我是 C++ 新手

我想搜索通过数组输入的变量。结构看起来像这样..

    struct Person
{
    string name;
    string phone;

    Person()
    {
        name = "";
        phone = "";
    }

    bool Matches(string x)
    {
        return (name.find(x) != string::npos);
    }



};

如何通过该结构搜索输入的值?

void FindPerson (const Person people[], int num_people)
{
    string SearchedName;
    cout<<"Enter the name to be searched: ";
    cin>>SearchedName;

    if(SearchedName == &people.name)
    {
        cout<<"it exists";
    }
}

这里有一小段代码片段说明了如何搜索结构。它包含自定义搜索功能以及使用 algorithm.

中的 std::find_if 的解决方案
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

struct Person
{ 
    std::string name;
    Person(const std::string &name) : name(name) {};
};


void custom_find_if (const std::vector<Person> &people,
                     const std::string &name)
{
    for (const auto& p : people)
        if (p.name == name)
        {
            std::cout << name << " found with custom function." << std::endl;
            return;
        }
    std::cout << "Could not find '" << name <<"'" << std::endl;
}


int main()
{
    std::vector<Person> people = {{"Foo"},{"Bar"},{"Baz"}};
 
    // custom solution
    custom_find_if(people, "Bar");

    // stl solution
    auto it = std::find_if(people.begin(), people.end(), [](const Person& p){return p.name == "Bar";});
    if (it != people.end())
        std::cout << it->name << " found with std::find_if." << std::endl;        
    else
        std::cout << "Could not find 'Bar'" << std::endl;
    return 0;
}

由于您是 c++ 的新手,该示例还使用了您可能不熟悉的以下功能:

  • 循环的范围基准 for (const auto& p : people)。遍历 people.
  • 的所有元素
  • lambda 函数 [](const Person& p){return p.name == "Bar";}。允许定义函数 'on-the-fly'。您还可以添加一个自由函数 bool has_name(const Person &p) {return p.name == "Bar";} 或(更好)一个可以将“Bar”存储为成员变量并定义 operator().
  • 的仿函数

注意 注意 lower/upper 大小写和空格。 "Name Surname" != "name surname" != "name surname".