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"
.
我是 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"
.