繁体   English   中英

使用映射的struct / class的C ++ Access成员

[英]C++ Access member of struct/class using map

我需要搜索一个由指向名为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);
    }
}
}

这是在学校,所以请不要建议我使用其他图书馆,因为我不能这样做。 谢谢!

每种数据类型必须进行不同的比较,因此,在没有明确知道您不走运的情况下,这些数据类型是不可行的。 字符串按字母顺序进行比较,数字按值进行比较,但我不确定是否还有其他自定义数据类型。

因此,除了要逐个介绍每种情况之外,您实际上没有太多选择。 例如

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

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

不必在每种情况下都处理搜索逻辑,只需返回一个函数指针即可,而不是告诉您如何比较两个Persons 实际的功能可能是按名称,年龄,社会保障或其他方面进行比较,但是一旦搜索功能具有告诉其如何比较两个Person对象的功能指针,您就不必在乎它了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM