gpt4 book ai didi

c++ - find_if 与 lambda 和捕获变量

转载 作者:行者123 更新时间:2023-11-30 05:07:05 25 4
gpt4 key购买 nike

我正在尝试解决骑士问题(在国际象棋中),我有以下代码来表示骑士可以做出的所有可能 Action :

typedef vector<pair<int,int> > Path;

Path moves(const pair<int,int> & pos)
{

Path allMoves =
{
{ (get<0>(pos))+1, (get<1>(pos))+2},
{ (get<0>(pos))+2, (get<1>(pos))+1},
{ (get<0>(pos))+2, (get<1>(pos))-1},
{ (get<0>(pos))+1, (get<1>(pos))-2},

{ (get<0>(pos))-1, (get<1>(pos))-2},
{ (get<0>(pos))-2, (get<1>(pos))-1},
{ (get<0>(pos))-2, (get<1>(pos))+1},
{ (get<0>(pos))-1, (get<1>(pos))+2}
};

return allMoves;
}

我想使用以下条件过滤它:

  • 正方形在棋盘内(没有负数位置,不等于或超过棋盘大小)
  • 方 block 不在给定的路径中

我已尝试执行以下操作:

Path legal_moves( const int size, Path visitedSquares, const pair<int,int> pos )
{

Path possible_moves = moves(pos);

auto legalMoves = find_if( possible_moves.begin(),
possible_moves.end(),
[]()
{

});

}

但我不确定如何在 lambda 中获取对的第一个元素(棋盘上的 x)和对的第二个元素(棋盘上的 y)并检查条件。

如果有什么不清楚的地方,请评论出来。

谢谢你的时间

最佳答案

您只需将 std::pair(移动)作为 lambda 中的参数:

auto legalMoves = find_if(possible_moves.begin(),
possible_moves.end(),
[](std::pair<int, int> const& a_move)
{
int x, y;
std::tie(x, y) = a_move;
// do whatever you want
});

你也可以使用auto:

auto legalMoves = find_if(std::begin(possible_moves), std::end(possible_moves),
[](auto const& a_move) {
int x, y;
std::tie(x, y) = a_move;
// do whatever you want
});

关于c++ - find_if 与 lambda 和捕获变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47654540/

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