【问题标题】: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 向量的副本似乎很容易出错,您最好参考一下恕我直言

标签: c++ object vector stl


【解决方案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 并将其设为私有
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 2013-07-10
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 2019-03-15
  • 2014-05-08
相关资源
最近更新 更多