수량:QMap의 벡터 반복자
문제
저는 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
, 이는 이와 관련하여 훨씬 더 나은 인터페이스를 제공합니다.
제휴하지 않습니다 StackOverflow