gpt4 book ai didi

c++ - 从数组更改为包含数组的结构

转载 作者:行者123 更新时间:2023-11-28 03:38:47 24 4
gpt4 key购买 nike

我正在更改代码以使其更适合我。

我有:

deque<array<array<int,4>,4>> visited;

现在我有:

deque<New_Array> visited;

New_Array 在哪里:

struct New_Array {
array<array<int,4>,4> pinak;
int h;
}Jim;

我的数组是这样的:

array<array<int,4>,4> myarray;

问题是我有一个像这样的 else-if 函数:

else if (find(visited.begin(), visited.end(), myarray)==visited.end())

此函数检查数组是否在访问的堆栈双端队列中。如果不是,则 else 函数起作用。但是现在,被访问的双端队列必须包含结构,而不是数组。 如何转换此函数以使用双端队列的新容器?

我进行了此更改,以便每个数组都可以与一个数字 (h) 相连。我需要检查数组,我不关心数字。

编辑:

错误 C2678:二进制“==”:未找到采用“New_Array”类型左侧操作数的运算符(或没有可接受的转换)

最佳答案

也许你可以使用 std::find_if :

else if (find_if(visited.begin(), visited.end(), 
[&myarray](const NewArray& newArray) {
return myarray == newArray.pinak;
}) == visited.end())

std::find_if(Iterator first, Iterator last, Predicate pred)返回指向范围 [first,last) 中第一个元素的迭代器,对其应用 pred 为真。

第一和第二个参数,visited.begin() , 和 visited.end()指定我们应该检查 std::deque<NewArray>名为 visited .

所以,我们遍历 std::deque称为 visited ,依次测试每个元素。

对于双端队列的每个元素,我们应用这个谓词:

[&myarray](consts NewArray& newArray) { return myarray == newArray.pinak }

此语法是一个 lambda 表达式。它创建一个对象,该对象随后可以被 () 调用。运算符(实际上是 find_if)。

lambda 的第一部分列出了可用于表达式主体的变量。在这种情况下,[&myarray]通过 const 引用使该变量在主体中可用。

接下来是operator()的参数列表: (const NewArray& newArray) .它与任何其他函数具有相同的含义。

最后,表达式的主体比较传入的元素visited使用变量 myarray .为了确定相等性,我们将数组与 pinak 进行比较传入结构的成员。

简而言之,find_if功能:

  • 遍历 visited 的每个元素.对于每个元素,它:
  • 调用列出的函数,它
  • 比较元素的 pinak加入 myarray

find_if然后返回指向所选元素的迭代器,或 .end()如果没有比较相等。

关于c++ - 从数组更改为包含数组的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000180/

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