我有一个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循环吗?非常感谢。
答案 0 :(得分:1)
该代码没有任何问题。问题可能在于GetXPos()
和GetZPos()
返回之间的比较。
如果它们是整数,那么应该没问题,代码应该可以工作。
如果它们是双打或浮动,则必须使用其他方式比较它们(see this StackOverflow question)。
如果它们是您实现的对象,请仔细检查它们的确定方式(您对这些对象的operator==
的实现)。