0

我需要搜索由指向名为 Person 的结构的指针的链接列表组成的数据库。在 Person 里面有一堆数据——名字、姓氏、社会保障等等。这些都是虚构的和无关紧要的。我的问题是我需要根据用户输入进行搜索,这决定了结构的哪个部分正在与搜索进行比较。由于所有数据都存储为 struct Person 的成员,我认为最好的方法(如不编写 8 个搜索函数)是通过映射,但我对映射的掌握非常差,几乎不存在. 以下是相关代码:

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);
    }
}
}

这是给学校的,所以请不要建议我只使用另一个图书馆,因为我不能。谢谢!

4

1 回答 1

0

每种数据类型都必须进行不同的比较,因此如果不明确知道数据类型,您就不走运了。字符串按字母顺序比较,数字按值比较,我不确定您是否有任何其他自定义数据类型。

因此,除了逐案处理之外,您在这里实际上没有太多选择。例如

    if type == 'name'                // compare each Person.name as string
    else if type == 'socialSecurity' // compare Person.socialSecurity as int
    else if ...

这是使此代码更加健壮的建议。

无需在每种情况下处理搜索逻辑,您可以简单地返回一个函数指针,而不是告诉您如何比较两个Persons. 实际的函数可能是按姓名、年龄、社会保障等进行比较,但是一旦您的搜索函数有了告诉它如何比较两个Person对象的函数指针,它就不必关心这些了。

于 2013-04-24T18:30:51.290 回答