C++ C++;使用映射访问结构/类的成员
我需要搜索一个由指向名为Person的结构的指针的链接列表组成的数据库。人里面有一堆数据——名字、姓氏、社会保险等等。这些都是虚构的,无关紧要。我的问题是,我需要根据用户输入进行搜索,这决定了要对结构的哪个部分进行搜索比较。由于所有数据都存储为struct Person的成员,因此我认为最好的方法(如不编写8个搜索函数)是映射,但我对映射的掌握太差,几乎不存在映射。以下是相关代码:C++ C++;使用映射访问结构/类的成员,c++,list,search,mapping,member,C++,List,Search,Mapping,Member,我需要搜索一个由指向名为Person的结构的指针的链接列表组成的数据库。人里面有一堆数据——名字、姓氏、社会保险等等。这些都是虚构的,无关紧要。我的问题是,我需要根据用户输入进行搜索,这决定了要对结构的哪个部分进行搜索比较。由于所有数据都存储为struct Person的成员,因此我认为最好的方法(如不编写8个搜索函数)是映射,但我对映射的掌握太差,几乎不存在映射。以下是相关代码: List * find(List * database, //mapping stuff, string name
List * find(List * database, //mapping stuff, string name)
{
//run search
return database;
}
void search(List * database)
{
string field, searchtype, userinput;
cout << "To search for a person, enter information in this format: 'field equal
value' or 'field begins value'. Type 'clear' to
return to original database. Type 'exit' to leave the program\n";
while(field != "exit")
{
cin >> field >> searchtype >> userinput;
if(userinput == "firstname") //this is just for example, I would have to write one of these out for each parameter.
{
List * smallerdb = find(database, map(//mapping stuff?), string userinput);
}
}
}
List*find(List*database,//映射内容,字符串名称)
{
//运行搜索
返回数据库;
}
无效搜索(列表*数据库)
{
字符串字段,搜索类型,用户输入;
cout>字段>>搜索类型>>用户输入;
如果(userinput==“firstname”)//这只是一个例子,我必须为每个参数写出其中一个。
{
List*smallerdb=find(数据库,映射(//mapping stuff?),字符串userinput);
}
}
}
这是学校用的,所以请不要建议我使用另一个图书馆,因为我不能。谢谢大家! 每种数据类型都必须进行不同的比较,因此在不明确了解数据类型的情况下,您的运气不佳。字符串按字母顺序进行比较,数字按值进行比较,我不确定是否有其他自定义数据类型 因此,除了逐一查看每个场景之外,您实际上没有太多选择。例如
if type == 'name' // compare each Person.name as string
else if type == 'socialSecurity' // compare Person.socialSecurity as int
else if ...
这里有一个建议,可以使这段代码更加健壮
不必在每种情况下都处理搜索逻辑,只需返回一个函数指针,然后告诉您如何比较两个人。实际的函数可能会按姓名、年龄、社会保障或其他方式进行比较,但一旦搜索函数有了告诉它如何比较两个
Person
对象的函数指针,它就不必关心这些了。您不需要映射。您需要一个参数化比较器,该比较器初始化为要比较的字段的“状态”。然后在比较项目时使用该比较器(可能是一个函子)。也许您希望将指向成员的指针传递到搜索函数中,并使用该指针从列表中的每个项目获取要搜索的数据。我想我把函子误认为是映射,但我对函子的理解仍然很模糊。你能给我指出正确的方向吗?