gpt4 book ai didi

c++ - Qt:QMap中 vector 的迭代器

转载 作者:行者123 更新时间:2023-11-30 04:08:01 24 4
gpt4 key购买 nike

我正在使用 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/

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