std :: map with cv :: Point作为键

pet*_*555 2 c++ algorithm opencv stl data-structures

我需要创造std::map<cv::Point, double>.cv::Point是一种来自OpenCV库的点.它有以下字段:xy.

cv::Point<当然没有操作员.您是否知道如何定义它以获得对元素的最佳访问std::map

换一种说法.我有例如20000点.我需要快速访问每一点.

例如:

std::map<cv::Point, double> myMap;

Point p(10, 234);
int value = 777;
myMap[p] = value; // I need this operation quite fast so I decided to use std::map
Run Code Online (Sandbox Code Playgroud)

但是cv :: Point没有<运算符.我可以准备<运算符(它只比较x坐标):

bool operator<(const cv::Point a, const cv::Point b)
{
    return a.x < a.x;
}
Run Code Online (Sandbox Code Playgroud)

但我想这不是好运营商.许多点具有相同的x值.

在这种情况下如何准备有效的操作员?

dav*_*igh 8

根据此文档,cv::Point表示二维数据点.为此,您可以<通过标准的词典排序来定义您的运算符:

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

编辑:当你考虑使用unordered_map:虽然它可能更适合在这里,它是更复杂一点实现,因为你有两个哈希值相结合xy.为此你可以自己使用boost::hash_combine或找出合理的东西,但你会发现它变得更加复杂.