OpenCV создать карту с точкой в ​​качестве ключа - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь вставить в карту, где ключи cv::Point, значения являются bools. Я делаю так, как показано ниже:

Mat& pts = ...
std::map<cv::Point, bool>& myMap;
myMap.insert({pts.at<Point>(5), true});

Но я получаю invalid operands to binary expression ('const cv::Point_<int>' and 'const cv::Point_<int>'){return __x < __y;}

Обратите внимание, что я определил следующее для сравнения:

 bool operator<(cv::Point const& a, cv::Point const& b)
 {
     return (a.x < b.x) || (a.x == b.x && a.y < b.y);
 }

Я не уверен, что я делаю не так. Даже если я закомментирую myMap.insert({pts.at<Point>(5), true});, у меня есть проблемы.

1 Ответ

3 голосов
/ 03 апреля 2020

Вместо вашей функции operator< объявите свой компаратор следующим образом:

struct ComparePoints
{
    bool operator () (const cv::Point& a, const cv::Point& b) const
    { 
        return (a.x < b.x) || (a.x == b.x && a.y < b.y);
    }
};

И ваша карта будет такой:

std::map <cv::Point, bool, ComparePoints> myMap;

Тогда все будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...