我正在使用 Qt 和 OpenCV,我想用 std::vector <cv::Rect_<int>>
创建一个迭代器可以访问所有 cv::Rect_.
此 vector 是 QMap < int, std::vector <cv::Rect_<int>> > _facesframe;
的一部分
这就是我尝试访问这些 vector 的方式:
foreach (unsigned int frame , _imageGItem->_faceSampler._facesframe.keys() )
{
std::vector <cv::Rect_<int>>::const_iterator it = _imageGItem->_faceSampler._facesframe.value(frame).begin();
if( it != _imageGItem->_faceSampler._facesframe.value(frame).end())
{
qDebug()<<"here";
}
}
但是程序在 if...
行崩溃了因为迭代器不兼容。
有人知道如何到达所有cv::Rect_<int>
吗?的 QMap < int, std::vector <cv::Rect_<int>> >
请?
最佳答案
这是因为您要将迭代器与不同的 vector 进行比较。
const T QMap::value(const Key & key, const T & defaultValue = T()) const
Vector 按值返回,所以这是复制的。
你应该使用
T & QMap::operator[](const Key & key)
纠正这个问题:
foreach (unsigned int frame , _imageGItem->_faceSampler._facesframe.keys() )
{
std::vector <cv::Rect_<int>>::const_iterator it =
_imageGItem->_faceSampler._facesframe[frame].begin();
if( it != _imageGItem->_faceSampler._facesframe[frame].end())
{
qDebug()<<"here";
}
}
或(由于制作了 1 个拷贝而效率较低):
std::vector <cv::Rect_<int>> v = // this will copy
_imageGItem->_faceSampler._facesframe.value(frame);
std::vector <cv::Rect_<int>>::const_iterator it = v.begin();
if( it != v.end())
{
qDebug()<<"here";
}
关于c++ - Qt:QMap中 vector 的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22072323/