pet*_*555 2 c++ algorithm opencv stl data-structures
我需要创造std::map<cv::Point, double>.cv::Point是一种来自OpenCV库的点.它有以下字段:x和y.
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值.
在这种情况下如何准备有效的操作员?
根据此文档,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:虽然它可能更适合在这里,它是更复杂一点实现,因为你有两个哈希值相结合x和y.为此你可以自己使用boost::hash_combine或找出合理的东西,但你会发现它变得更加复杂.