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

标签 c++ qt vector iterator qmap

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

相关文章:

c++ - 如何翻译 qmessagebox 中的按钮?

c++ - 我有一个浮点溢出问题

c++ - 定义QML信号参数类型时出现意外的 `:' token

python - 安装 PyQt

c++ - 具有自定义 vector 类型的堆栈

c++ - 用于可查找电影格式的 C/C++ 库

适用于 Google 财经的 C++ API

c++ - 如何将 QSizeGrip 放在 QDial 的右下角?

c++ - 从 vector 文件中读取数据

c++ - 此代码如何从两个二维 vector 的叉积中检索二维 vector ?