문제

저는 Qt 및 OpenCV로 작업 중이며 다음을 사용하여 반복자를 만들고 싶습니다. std::vector <cv::Rect_<int>> 모든 cv::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

벡터는 값으로 반환되므로 복사됩니다.

당신은 사용해야합니다

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

다른 팁

QMap::value 에 의해 반환 값. 즉, 복사 물론 반복자는 다른 벡터(다른 복사본)를 가리킵니다.non-const 버전을 사용하도록 변경하세요. operator[] 대신에 ( const 그 버전 또한 값으로 반환).아니면 그냥 사용 std::map, 이는 이와 관련하여 훨씬 더 나은 인터페이스를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top