如何在C++中找到2D向量中的向量

How to find a vector in a 2D vectors in C++?

本文关键字:向量 2D C++      更新时间:2023-10-16

我正在尝试实现一个函数来在2D向量中查找向量。我写的是:

vector<vector<int> > result;
vector<int> line;
bool isPresent = find(result.begin(), result.end(), line)

然而,这给出了一个错误,

"第11行:初始化时无法将'__gnu_cxx::__normal_iterator*,std::vector>>'转换为'bool'"

我搜索了很多论坛,但都找不到正确的答案。最好的方法是什么?

谢谢,Shawn

InputIterator std::find(InputIterator first, InputIterator last, const T& val)

迭代器返回到范围[first,last)中比较等于val的第一个元素。如果找不到这样的元素,函数将返回last。

改为使用:

bool isPresent = std::find(result.begin(), result.end(), line) != result.end();
//                                                             ^^^^^^^^^^^^^^^

或:

bool isPresent = std::any_of(result.begin(), result.end(),
                             [&line](const std::vector<int>& x)
                             { return x == line; });

更改依据:

bool isPresent = (find(result.begin(), result.end(), line) != result.end());

如果允许C++11,或者更好:

bool isPresent = (find(cbegin(result), cend(result), line) != cend(result));

容器的方法std::find返回匹配元素的iterator,或者如果元素不存在则返回提供的range end(签名方法中的最后一个)。

template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);

我的第一个猜测是find返回迭代器,它在那里找到了你要求它找到的项,而不是布尔值。

它应该是这样的:

vector<vector<int> > result;
vector<int> line;
vector< vector<int> >::iterator it = find(result.begin(), result.end(), line);
bool isPresent = ( it != result.end() );

将代码更改为

bool isPresent = find(result.begin(), result.end(), line) != result.end();

如前所述,std::find()返回的是vector<vector<int> >::iterator,而不是bool