我正在更改我的代码,以便它更适合我。
我有:
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())
此函数检查数组是否在访问的stack-deque中。如果不是那么else-function有效。但是现在,访问过的deque必须包含结构,而不是数组。 如何转换此功能以使用双端队列的新容器?
我进行了此更改,因此每个阵列都可以用数字(h)连接。 我需要检查数组,我不关心数字。
修改
错误C2678:二进制'==':找不到哪个运算符带有'New_Array'类型的左手操作数(或者没有可接受的转换)
答案 0 :(得分:2)
也许您可以使用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>
的{{1}}。
因此,我们遍历名为visited
的{{1}},依次测试每个元素。
对于双端队列的每个元素,我们应用此谓词:
std::deque
此语法是lambda表达式。它创建了一个对象,随后可以由visited
运算符调用(事实上,[&myarray](consts NewArray& newArray) { return myarray == newArray.pinak }
确实如此)。
lambda的第一部分列出了变量,该变量将可用于表达式的主体。在这种情况下,()
通过const引用使该变量在正文中可用。
下一部分是find_if
:[&myarray]
的参数列表。它与任何其他函数具有相同的含义。
最后,表达式的主体将operator()
的传入元素与变量(const NewArray& newArray)
进行比较。为了确定相等性,我们将数组与传入结构的visited
成员进行比较。
简而言之,myarray
功能:
pinak
的每个元素。对于每个元素,它:find_if
成员与visited
pinak
然后返回一个指向所选元素的迭代器,如果没有,则返回myarray
。
答案 1 :(得分:0)
如果我正确地阅读了您的问题,您需要做的是为您的结构定义一个等于运算符。然后,Find可以在搜索中使用该运算符。