无法在对象指针向量中找到对象

时间:2016-06-07 09:12:25

标签: c++ lambda

我有一个Node *(openList)的向量,当我给出targetNode时,我希望得到Node *的迭代器。它应该检查x& z位置,如果找到匹配,我会知道这个节点*已经存在。这就是我所拥有的

auto iter = std::find_if(openList.begin(), openList.end(), [&targetNode](const Node* p)
                {
                  return (targetNode->GetXPos() == p->GetXPos() && targetNode->GetZPos() == p->GetZPos());
                });
if (iter != openList.end())
{
  ....do something
}

当我单步执行Visual Studio时,我注意到openList中有多个相同的条目没有被lambda表达式捕获。任何人都可以告诉我我做错了什么,因为我从来没有进入do-something循环吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

该代码没有任何问题。问题可能在于GetXPos()GetZPos()返回之间的比较。

如果它们是整数,那么应该没问题,代码应该可以工作。

如果它们是双打或浮动,则必须使用其他方式比较它们(see this StackOverflow question)

如果它们是您实现的对象,请仔细检查它们的确定方式(您对这些对象的operator==的实现)。