Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.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++ - Fatal编程技术网

C++ 如何通过一个或多个参数实现搜索

C++ 如何通过一个或多个参数实现搜索,c++,C++,我有一个装东西的容器。我需要通过多个参数实现搜索(即用户可以选择不同的参数,我需要找到具有这些参数的所有对象) 假设我们有一个容器std::vector v,其中存储了带有字段的对象:[名称、年龄、职业] ["Lucy", 18, "None"], ["Alex", 25, "Teacher"], ["Lucy", 18, "Student"], ["Lucy", 25, "None"], ["Sofia", 25, "None"]. 例如,用户需要所有名为Lucy的人。他得到的结果是: ["

我有一个装东西的容器。我需要通过多个参数实现搜索(即用户可以选择不同的参数,我需要找到具有这些参数的所有对象)

假设我们有一个容器
std::vector v
,其中存储了带有字段的对象:[名称、年龄、职业]

["Lucy", 18, "None"],
["Alex", 25, "Teacher"],
["Lucy", 18, "Student"],
["Lucy", 25, "None"],
["Sofia", 25, "None"].
例如,用户需要所有名为Lucy的人。他得到的结果是:

["Lucy", 18, "None"],
["Lucy", 18, "Student"],
["Lucy", 25, "None"].
["Lucy", 18, "None"],
["Lucy", 18, "Student"].
现在,用户希望找到18岁时名叫露西的人。他将得到以下结果:

["Lucy", 18, "None"],
["Lucy", 18, "Student"],
["Lucy", 25, "None"].
["Lucy", 18, "None"],
["Lucy", 18, "Student"].
现在他需要25岁时没有职业的人

["Lucy", 25, "None"],
["Sofia", 25, "None"].
进行搜索的字段的选择取决于用户的选择!他可以在GUI中选择搜索参数

我想我需要一些比较器,但不知道它应该是什么样子

template<typename _Comp>
struct Person
{
    std::string name;
    int age;
    std::string profession;
};
模板
结构人
{
std::字符串名;
智力年龄;
字符串专业;
};
我想你有

struct Person {
    std::string name;
    unsigned age;
    std::string profession;
};
和一个充满数据的向量

  std::vector<Person> persons{ {"Lucy", 18, "None"},
                             {"Alex", 25, "Teacher"},
                             {"Lucy", 18, "Student"},
                             {"Lucy", 25, "None"},
                             {"Sofia", 25, "None"}};
这可以推广为将拾取元素的lambda传递给函数,这样您就可以使用相同的函数来拾取
name
age
profession
,例如

template <typename F>
std::vector<Person> select_by(const std::vector<Person>& persons,F f){
    std::vector<Person> result;
    auto copy_to = std::back_inserter(result);       
    std::copy_if(persons.begin(),persons.end(),copy_to,f);
    return result;
}

也许可以尝试编写简单的方法,分别进行这些类型的查找。然后看看你写的东西,看看你是否能找到整合它们的方法,比如把它们的不同之处改成其他类型的参数。在最坏的情况下,你至少可以在这里把它们作为一个更具体的“我如何使这一个功能?”的例子引入问题。不要让我们猜测,而是展示代码。它是什么类型的容器?您是否有一个包含成员
姓名
年龄
职业
的结构?一旦你弄清楚了这些细节,剩下的只是2-3行代码。两个头总比一个头好。这里有很多LINQ风格的C++库和其他库:或者你可以通过lambda——我认为那看起来很不错。@JerryJeremiah是的,那更好
auto selected = select_by(persons,equal_name);