如何在C++中找到2D向量中的向量
How to find a vector in a 2D vectors in C++?
我正在尝试实现一个函数来在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
。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 如何在C++或OpenCV子矩阵中的2D子向量上使用OpenACC?
- 哪个更快:在 1d 向量中按字符串搜索还是在 2d 向量中按向量搜索?
- 分配具有 2D 向量大小的变量的内存
- 根据组件 1、2(和 3)对空间 (2D/3D) 向量进行排序
- 在统一内存 CUDA C/C++ 中分配 2D 向量
- 索引 2D 向量时'Reference to type const..'编译错误
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 如何在 C++ 中的函数中传递 2D 向量的子向量
- 为 2D 向量类创建标量乘法运算符
- 无法使用push_back将整数插入1D/2D向量
- 如何将列附加到现代C 中的2D向量
- 如何声明和初始化一个特定尺寸向量的2D数组
- 如何计算 2D 数组中每行的总和并放置在向量中
- 在不使用递归的情况下求解所有 2D 字符串向量组合?(C++)
- 在类中创建向量(2D 数组)的向量 - Error:C++ 需要所有声明的类型说明符
- 在C++中使用向量的向量(2D 向量)表示邻接列表
- 将向量(2D数组)的向量重置为零