سؤال

أنا أعمل مع Qt وOpenCV وأرغب في إنشاء مكرر به std::vector <cv::Rect_<int>> للوصول إلى كافة السيرة الذاتية::Rect_.
هذا المتجه هو جزء من QMap < int, std::vector <cv::Rect_<int>> > _facesframe;

إذن هذه هي الطريقة التي أحاول بها الوصول إلى هذه المتجهات:

                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>> > لو سمحت؟

هل كانت مفيدة؟

المحلول

هذا لأنك تقارن التكرارات بنواقل مختلفة.

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";
      }

  }

أو (أقل كفاءة بسبب إنشاء نسخة واحدة):

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";
  }

نصائح أخرى

QMap::value يعود بواسطة قيمة. مما يعني أنه يعود أ ينسخ المتجه، وبالطبع يشير المكرر إلى متجه مختلف (نسخة مختلفة).قم بتغييره لاستخدام الإصدار غير الثابت operator[] بدلا من ذلك (كما const نسخة من ذلك أيضًا العائد بالقيمة).أو مجرد استخدام std::map, ، والذي يوفر واجهة أفضل بكثير في هذا الصدد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top