C++ 搜索三层结构(双向)

C++ 搜索三层结构(双向),c++,algorithm,C++,Algorithm,[注意]我试图编辑您的问题。如果这是正确的,请接受。原来的问题很模棱两可 我有一些任务要做。用户可以输入函数名,也可以输入类和文件名。我必须根据检查列表对此函数名执行一些检查。但是,问题在于,检查列表中的检查是针对文件而不是函数进行描述的。i、 它描述了对每个文件中出现的所有类和函数的检查。因此,当用户输入函数名时,我需要将其映射到正确的文件并找到正确的检查 你能建议一些有效的方法吗 编辑:(尽可能简单,对不起,我的英语不是最好的;) 假设我们有一个应用程序(脚本?),我们想分析它(是的!我们正

[注意]我试图编辑您的问题。如果这是正确的,请接受。原来的问题很模棱两可

我有一些任务要做。用户可以输入函数名,也可以输入类和文件名。我必须根据检查列表对此函数名执行一些检查。但是,问题在于,检查列表中的检查是针对文件而不是函数进行描述的。i、 它描述了对每个文件中出现的所有类和函数的检查。因此,当用户输入函数名时,我需要将其映射到正确的文件并找到正确的检查

你能建议一些有效的方法吗

编辑:(尽可能简单,对不起,我的英语不是最好的;)

假设我们有一个应用程序(脚本?),我们想分析它(是的!我们正在创建类似profiler!:D的东西),但我们不想检查所有内容,只想检查几个函数。但有一个问题。我们的分析器的用户希望以一种有点奇怪的方式给出要评测的函数列表

因此,他可以给我们: -函数名——我们需要分析每个函数(或方法),不管它在哪里(可以在每个文件、每个类或类似于标准库的东西中(在本例中,我们没有文件名))。 -类的名称-我们需要分析该类中的每个函数/方法,但类本身可以位于少数文件中的任何位置(我们可以有同名的不同类) -文件名-我们需要分析此文件中的所有内容,但可能有少数几个文件具有相同的名称(因此在每个文件中,我们需要分析每个函数/方法)

所有以上的混合,所以如果我们有类(我们称之为“Bar”)和函数(“foo”),我们需要在类“Bar”中分析这个函数“foo”,但类仍然可以在任何文件中(在少数文件中可以有几个“Bar”类。如果我们有文件名和函数名,我们需要分析每个具有该名称的函数(不管它是在任何类的内部还是外部)在文件中(但仍然可以有几个同名的文件)


很少的文件或很少的类并不是一个真正的问题,因为我已经在profiler中替换了执行函数(是的,profiler本身正在工作),但问题是如何存储函数(以及类和文件)的名称,以便尽可能快地(内存是否快并不重要)搜索函数应该是profile(简而言之:执行函数询问它是否应该配置此函数,我们需要给出答案,在执行函数中,我们有函数名(当然)、类名(如果函数是来自类的方法)和文件名(如果函数不是来自标准库)。

您可以生成一个xml文件来存储您的检查列表信息。如下所示:

<file name="file1"...>
    <class name="class1" ...>
        <func name=" func1" ... />
    </class>
</file>

运行程序时,将xml读入内存,每个层次结构构建一个对象,高层次结构的对象包含低层次结构的对象。 并构建三个映射列表,第一个“字符串”是文件或类或func的名称,第二个“object*”是指向由xml构建的对象的点


当你得到一个信息时,你可以使用map::find来搜索它。如果你找到了“object1”,你可以使用“object1”及其包含的对象中定义的方法。

你可以浏览所有的文件->类->函数,创建一个映射(哈希映射),函数名作为键,类和文件信息作为值


用户输入函数名->您可以通过搜索地图立即获得文件/类名->您可以搜索文件名的规则列表并应用规则。

uhmmm…我想一个小例子可以帮助我理解您的问题。我什么都不懂。我不知道您在问什么。听起来像是解析cpp源文件,是吗?试试simp通过清楚地说明输入是什么和输出应该是什么来简化问题的措辞。事实上,我理解你得到了关于(函数、类、文件)的信息并且需要做些什么。你有没有特意选择适合这个问题的句子?这个答案似乎很含糊。例如什么是“映射列表”?映射还是列表?什么是“指向对象”?你是指指针吗?如果用户只给我类名(这意味着我需要为类中的每个函数做我的工作)或文件名,我将不工作(与以前一样,但适用于文件中的每个函数和/或文件中每个类中的每个函数/方法)。如果为类名创建相同类型的映射,则可以找到它的文件名然后你可以向前遍历它,从类到函数,这很简单。当用户给你一个文件名时,你可以枚举里面的所有类和函数,然后完成你的工作。这并不耗时,因为一个文件后面包含太多的函数。