Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用映射访问结构/类的成员_C++_List_Search_Mapping_Member - Fatal编程技术网

C++ C++;使用映射访问结构/类的成员

C++ C++;使用映射访问结构/类的成员,c++,list,search,mapping,member,C++,List,Search,Mapping,Member,我需要搜索一个由指向名为Person的结构的指针的链接列表组成的数据库。人里面有一堆数据——名字、姓氏、社会保险等等。这些都是虚构的,无关紧要。我的问题是,我需要根据用户输入进行搜索,这决定了要对结构的哪个部分进行搜索比较。由于所有数据都存储为struct Person的成员,因此我认为最好的方法(如不编写8个搜索函数)是映射,但我对映射的掌握太差,几乎不存在映射。以下是相关代码: List * find(List * database, //mapping stuff, string name

我需要搜索一个由指向名为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);
    }
}
}
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
对象的函数指针,它就不必关心这些了。

您不需要映射。您需要一个参数化比较器,该比较器初始化为要比较的字段的“状态”。然后在比较项目时使用该比较器(可能是一个函子)。也许您希望将指向成员的指针传递到搜索函数中,并使用该指针从列表中的每个项目获取要搜索的数据。我想我把函子误认为是映射,但我对函子的理解仍然很模糊。你能给我指出正确的方向吗?