查找对象属性是不是在对象的向量中 C++ [重复]

Posted

技术标签:

【中文标题】查找对象属性是不是在对象的向量中 C++ [重复]【英文标题】:Find if an object attribute is in the Vector of objects C++ [duplicate]查找对象属性是否在对象的向量中 C++ [重复] 【发布时间】:2019-02-05 18:34:38 【问题描述】:

我正在尝试查找对象的属性是否在向量中。 例如,如果我有一个 Car 对象向量,并且 Car 对象具有许可证、方向和时间属性。我想找出方向“N”是否在 Car 对象的向量中。如果属性在 Cars 的向量中,则返回 true 或 false。

这是我目前拥有的功能,但是我想使用stl find()方法来搜索属性:

bool isIn(std::vector<Car *> c, std::string check)
for (auto i = 0; i < c.size(); i++)

    if (c[i]->dir == check)
    
        return true;
    

return false;

传入的参数是汽车的向量和方向。

【问题讨论】:

std::any_of 和朋友有什么问题,需要编写自己的变体? 但我想使用 stl find() 方法 -- 你的意思是std::find_if 是的@PaulMcKenzie 顺便说一句,使用 pointers 向量的副本似乎很容易出错,您最好参考一下恕我直言 【参考方案1】:

在您的情况下,std::find_if 可能是解决方案

auto it = find_if(c.begin(), c.end(), [&check](const Car& obj) return obj.getDir() == check;)

【讨论】:

所以我稍微改了一下:auto it = find_if(c.begin(), c.end(), [&check](const Car *obj) return obj->dir ==查看; ); .它会返回什么? 这很可能会产生编译错误。如果您不喜欢通过引用传递,您可以通过值 [&check](Car obj) 传递。这将返回一个迭代器类型的对象,然后您可以取消引用并获取匹配条件的实际 Car 对象 我确实首先通过引用传递它给了我一个错误:“参数 1 从 'Car*' 到 'const Car&' 没有已知的转换” 我把 Car * 的向量改成 Car 的向量 是的,正如 OznOg 在 cmets 中正确说明的那样,这是正确的。但是,您在 lambda 表达式 [&amp;check](const Car *obj) return obj-&gt;dir 中将指针作为参数的建议在这种情况下肯定会起作用。此外,您应该考虑为您的成员实施 getter 并将其设为私有

以上是关于查找对象属性是不是在对象的向量中 C++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

按对象属性搜索对象向量

C++ OOP,输出对象指针向量时的空白控制台,不确定填充向量是不是正确

如何在 C++ 中向向量中添加新对象

对象向量是不是在 C++ 中的堆或堆栈上分配?

c++ 引用向量的问题?

如何在 C++ 中访问类对象向量中的对象?