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
或找出合理的东西,但你会发现它变得更加复杂.
归档时间: |
|
查看次数: |
3108 次 |
最近记录: |