gpt4 book ai didi

c++ - 如何在具有多个成员的自定义对象的 vector 上使用查找

转载 作者:行者123 更新时间:2023-11-28 01:51:05 26 4
gpt4 key购买 nike

这是我的 2 个结构来演示我的问题。我有一个包含列 vector 的表

struct column{
string col_name;
int index;
};

struct table{
vector<vector<stuff>> rows;

vector<column> columns;
};

我想做的是搜索我的一个对象是否有一个包含我感兴趣的字符串col_name

我正在尝试使用 std::find,但我很难将语法放在一起。

说我有

  vector<table> all_tables;

我如何搜索一个表(比如说索引为 0 的表)以查看它是否包含 bacon 作为 col_name

目前为止

 find(all_tables[0].columns

这就是我被困的地方。 columns 是一个 vector ,它需要一个索引,但我不确定要给出什么索引。我只做 columns.begin() 吗?这似乎不正确,因为我有多个成员变量。我真的很想查看列的开头和结尾,看看它是否有我感兴趣的正确字符串(不是 int 索引)。

我知道 find 的语法通常是 find(v.begin(), v.end(), "bacon"),但我不知道在这种情况下如何使用它。

我会很感激一些帮助。谢谢!

----例子-----

我有一个包含 3 列的表格,分别名为“pie”、“apple”和“bacon”。所以我的表结构中 vector 列的大小是 3。我希望能够在仅给定表索引的情况下搜索其列 vector (如果它包含具有我感兴趣的名称的列)。

最佳答案

你需要的是std::find_if - 它允许您将任何条件指定为可调用参数,而不仅仅是要比较的值:

std::find_if(all_tables[0].columns.begin(), all_tables[0].columns.end(),
[](const column& c){ return c.col_name == "bacon";});

这里的最后一个参数是一个返回 bool 的 lambda。 find_if 会将其应用于该范围内的所有 ,直到找到满足 lambda 条件的列 (c.col_name == "bacon")。

您可以在这里传递任何可调用对象而不是 lambda,例如std::function 或者您可以定义自己的闭包类,不过使用 lambda 可能是最方便的方法。

请注意 std::findstd::find_if 做同样的事情,它只是默认为 operator== 作为条件,所以另一种方法是像这样为您的类定义 operator==:

struct column{
string col_name;
int index;

bool operator==(const column& c) const
{ return col_name == c.col_name; }

};

然后只需使用常规 std::find():

column sample{"bacon"};
std::find(all_tables[0].columns.begin(), all_tables[0].columns.end(), sample);

也许您的对象应该在它们的col_name相同时被认为是相等的,那么第二种方式可能更可取。否则,不乱用 operator== 可能更安全。这由您决定,具体取决于您的类型逻辑。

关于c++ - 如何在具有多个成员的自定义对象的 vector 上使用查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com