C ++使用map访问struct / class的成员

时间:2013-04-24 18:19:54

标签: c++ list search mapping member

我需要搜索一个数据库,该数据库由一个名为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);
    }
}
}

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

1 个答案:

答案 0 :(得分:0)

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

所以除了经历每个案例之外,你在这里没有太多的选择。例如。

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

以下建议使此代码更加健壮。

除了在每种情况下处理搜索逻辑外,您只需返回一个函数指针,而不是告诉您如何比较两个Persons实际函数可能按名称,年龄,社会保障等进行比较,但是一旦它具有告诉它如何比较两个{的函数指针,你的搜索函数将不必关心它。 {1}}对象。